和为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;
}
}
查看4道真题和解析