题目:输入一个递增排序的数组array[n]和一个数字s,在数组中查找两个数,使得他们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。
定义两个指针head,tail,,分别指向数组第一个array[0]和数组最后一个array[n-1],然后判断两者的和与s的关系:
- 若两者的和大于s,则指向数组最后一个的指针向前移动,即head++
- 若两者的和等于s,则直接输出这两个数
- 若两者的和小于s,则指向数组第一个的指针向后移动 ,即tail++
public class Offer41 {
public static void main(String[] args){
int[] arrsy = {};
Random random = new Random();
for(int i = 0;i<100;i++){
boolean flag = Offer41.findNumberWithSum(arrsy, random.nextInt(30));
}
}
public static boolean findNumberWithSum(int[] nums,int sum){
boolean res = false;
if(nums == null ||nums.length<1){
return res;
}
System.out.print(sum+"\t");
int head = 0;
int tail = nums.length-1;
while(head<tail){
int currSum = nums[head]+nums[tail];
if(currSum==sum){
printNums(nums[head], nums[tail]);
res = true;
return res;
}else if(currSum>sum){
tail--;
}else if(currSum<sum){
head++;
}
}
return res;
}
/**
* 打印函数
* @param nums
*/
public static void printNums(int num1,int num2){
System.out.println(num1+"\t"+num2+"\n");
}
}