题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。
代码如下:
package demo;
import java.util.ArrayList;
import java.util.List;
/**
* 和为s的两个数字
*
* @author xiangdonglee
*
*/
public class Test41_1 {
public static List<Integer> findNumbersWithSum(int[] data, int sum) {
List<Integer> result = new ArrayList<>(2);
if (data == null || data.length < 2) {
return result;
}
int tail = data.length - 1;
int head = 0;
// 统计和,取long是为了防止溢出
long curSum;
while (head < tail) {
curSum = data[head] + data[tail];
if (curSum == sum) {
result.add(data[head]);
result.add(data[tail]);
break;
} else if (curSum < sum) {
head++;
} else {
tail--;
}
}
return result;
}
public static void main(String[] args) {
test1();
}
private static void test1() {
int[] data1 = { 1, 2, 4, 7, 11, 15 };
System.out.println(findNumbersWithSum(data1, 15));
int[] data2 = { 1, 2, 4, 7, 11, 16 };
System.out.println(findNumbersWithSum(data2, 17));
int[] data3 = { 1, 2, 4, 7, 11, 16 };
System.out.println(findNumbersWithSum(data3, 10));
}
}

网友评论