《剑指》41

来源:互联网 发布:网络文化建设重点内容 编辑:程序博客网 时间:2024/04/28 15:32

题目:输入一个递增排序的数组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");    }}
0 0
原创粉丝点击