剑指Offer-41

来源:互联网 发布:手机扫描条形码软件 编辑:程序博客网 时间:2024/04/28 01:41

题目1:

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得它们的和正好是S,如果有多对,输出任意一对即可。

题目2:

输入一个整数s,打印出所有和为s的连续整数序列。(至少两个数)

实现

public class Solution41 {    public static void findNums1(int[] nums,int s){        if(nums==null || nums.length<2){            return;        }        Map<Integer,Integer> dic = new HashMap<Integer,Integer>();        for(int i=0;i<nums.length;i++){            if(dic.containsKey(nums[i])){                dic.put(nums[i],2);            }            else{                dic.put(nums[i],1);            }        }        for(int i=0;i<nums.length;i++){            int diff = s-nums[i];            if(dic.containsKey(diff)){                if(diff==nums[i]){                    if(dic.get(diff)==2){                        System.out.printf("满足要求的数:%d,%d",diff,nums[i]);                    }                }                else{                    System.out.printf("满足要求的数:%d,%d",diff,nums[i]);                }            }        }    }    public static void findNums2(int[] nums,int s){        if(nums==null || nums.length<2){            return;        }        int start=0;        int end=nums.length-1;        while (start<end){            int sum = nums[start]+nums[end];            if(sum==s){                System.out.printf("满足要求的数:%d,%d",nums[start],nums[end]);                return;            }            else if(sum>s){                end--;            }            else {                start++;            }        }        System.out.printf("没有满足要求的数");    }    public static void findContinuousSequence(int sum){        if(sum<3){            return;        }        int small =1;        int big=2;        int cur_sum = small+big;        int middle = (1+sum)/2;        while (small<middle){            if(cur_sum==sum){                printNums(small,big);            }            while (cur_sum>sum && small<middle){                cur_sum-=small;                small++;                if(cur_sum==sum){                    printNums(small,big);                }            }            big++;            cur_sum+=big;        }    }    public static void printNums(int start,int end){        for(int i=start;i<=end;i++){            System.out.format("  %d",i);        }        System.out.println();    }    public static void main(String[] args){        findContinuousSequence(15);    }}
原创粉丝点击