/*
* 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使它们的和刚好为s
* 如果存在多对这样的数,输出任意一对即可
*/
public class FindSumEqualsS {
//法一:暴力搜索,算法复杂度O(n^2)
public int[] findSumEqualsS(int [] array, int s) {
boolean flag = false;
int[] result = new int[2];
for(int i = 0;i < array.length - 1;i ++) {
for(int j = i + 1;j < array.length;j ++) {
if(array[i] + array[j] == s) {
result[0] = array[i];
result[1] = array[j];
flag = true;
break;
}
}
if(flag) {
break;
}
}
return result;
}
/*法二:定义两个指针,一个指针指向数组第一个数,另一个指针指向数组最后一个数。
*将这两个指针指向的数相加,如果等于目标值,则停止迭代。
*如果小于目标值,则增加较小的值;如果大于目标值,则减小较大的那个值。算法复杂度:O(n)
*/
public int[] findSumEqualsS2(int [] array, int s) {
int i = 0;
int j = array.length - 1;
int[] result = new int[2];
while(i < j) {
if(array[i] + array[j] == s) {
result[0] = array[i];
result[1] = array[j];
break;
}
else if(array[i] + array[j] < s) {
i ++;
}
else {
j --;
}
}
return result;
}
public static void main(String[] args) {
int[] array = {1,2,4,7,11,15};
int s = 15;
int[] result = new FindSumEqualsS().findSumEqualsS2(array, s);
System.out.println(result[0] + " " + result[1]);
}
}
《剑指offer》-在数组中查找两个数,使它们的和刚好为s
最新推荐文章于 2022-08-03 15:10:13 发布