和为s的问题

2018-08-29  本文已影响6人  稀饭粥95

和为S的连续正数序列

a为1,b为2。如果a+b的值小于s,那么b++,如果a+b的值大于s那么a++

public class Solution {
        ArrayList<ArrayList<Integer> > list = new ArrayList<ArrayList<Integer>>();
         
        public void numberSeqSum(int sum){
            if(sum==0) System.out.println("no");
            int small = 1;
            int big = 2;
            int mid = (sum+1)/2;//至少两个数
            int total = small+big;
            while(small<mid&&small<big){
                if(total==sum){
                    ArrayList<Integer> l = new ArrayList<Integer>();
                    for(int i=small;i<=big;i++){
                        l.add(i);
                    }
                    list.add(l);
                    //System.out.println(small+" "+big);
                    big++;
                    total = total+big;
                }else if(total < sum){
                    big++;
                    total = total + big;
                }else{
                    total = total - small;
                    small++;
                }
            }
             
        }
        public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
           if(sum==1||sum==2) return list;
           numberSeqSum(sum);
           return list;
        }
}

和为s的两个数字

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] s,int target) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        if(s.length==0) return list;
        int a=0;int b=s.length-1;
        while(a<b){
            int sum = s[a] + s[b];
            if(sum==target) break;
            else if(sum>target) b--;
            else a++;
        }
        if(a==b){
            return list;
        }
        list.add(s[a]);
        list.add(s[b]);
        return list;
}
上一篇下一篇

猜你喜欢

热点阅读