题目:和为s的数字
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使它们的和为s。如果有多对和为s,输入任意一对即可。
思路:
使用两个指针分别指向数组的头、尾。如果和大于s,头部指针后移,如果和小于s,尾部指针前移。
基于以上思路,java参考代码如下:
public class Test {
public static int[] findNumbersWithSum(int[] data,int target) {
int start=0,end=data.length-1;
int res[]=new int[]{0,0};
if(data==null||target<2)//做一些输入异常处理
return res;
while(start<end) {
if(data[start]+data[end]==target) {
res[0]=data[start];
res[1]=data[end];
return res;
}else if(data[start]+data[end]>target) {
end--;
}else {
start++;
}
}
return res;
}
public static void main(String[] args) {
int[] nums=new int[]{1,2,4,7,11,15};
int k=15;
/* int[] result=new int[2];
result=findf(nums,k);*/
int[] result=findNumbersWithSum(nums,k);//声明和赋值一步搞定
System.out.println(result[0]);
System.out.println(result[1]);
}
}
测试用例:
a.功能测试(数组中存在和为S的两个数;数组中不存在和为S的两个数)。
b.特殊输入测试(表示数组的指针为nullptr指针)。