《剑指offer》面试题57:和为s的数字

题目:和为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指针)。

参考:

https://www.jianshu.com/p/9e4be7866cb9

猜你喜欢

转载自blog.csdn.net/qq_43502142/article/details/87718486