和为S的两个数字-Java实现

和为S的两个数字

http://www.nowcoder.com/questionTerminal/390da4f7a00f44bea7c2f3d19491311b

一. 思路

递增的排序数组,大概都可以用类似二分查找那样的双指针思路。采用双指针法

二. 代码

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> result = new ArrayList<>();
        int i = 0, j = array.length-1;

        int ij = Integer.MAX_VALUE;

        while (i < j) {
            int sumV = array[i] + array[j];
            // 和太大了,那就j--
            if (sumV > sum) {
                j--;
            }else if (sumV < sum) { // 和太小了,那就i++
                i++;
            }else {
                if (ij > i*j) {
                    result.clear();
                    result.add(array[i]);
                    result.add(array[j]);
                    ij = i * j;
                }
                i++;
            }
        }

        return result;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务