剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)

题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数。

思路:分别用两个指针指向数组的头start和尾end。如果两个数字之和等于S输出。如果打于,则end--,再次相加。因此循环条件就是start<end.
题目2:输入正整数S,打印出所有和为S的的正整数序列。例如:15的正整数序列为:{1,2,3,4,5},{3,4,5,6},{7,8}
思路:首先我们确定的是,这个整数序列必须至少有两个数字。可以定义一个头指针start=1,尾指针 end=2。start是要小于
(S+1)/2,如果start和end的和小于s,那么添加一个end++,如果添加后等于s,打印出来。如果start加上end大于s.
那么去掉当前的start,start++.

java代码:

//题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数。
//题目2:输入正整数S,打印出所有和为S的的正整数序列。例如:15的正整数序列为:{1,2,3,4,5},{3,4,5,6},{7,8}
//2的思路:首先我们确定的是,这个整数序列必须至少有两个数字。可以定义一个头指针start=1,尾指针 end=2。start是要小于
//(S+1)/2,如果start和end的和小于s,那么添加一个end++,如果添加后等于s,打印出来。如果start加上end大于s.
//那么去掉当前的start,start++.

public class SumEqualsS {
    public void sumEqualsS(int[] a,int s){
        if(a==null||a.length<2)
            return;
        int start=0;//指向数组的头,只向后移
        int end=a.length-1;//指向数组的尾部,只向前移
        while(start<end){
            if(a[start]+a[end]==s){
                System.out.println(a[start]+" "+a[end]);
                break;
            }
                if(a[start]+a[end]>s)
                end--;
            else
                start++;
        }
    }
    public void printAllSequence(int s){
        if(s<3)
            return;
        int start=1;//指向序列的开始
        int end=2;//指向序列的结束
        int middle=(s+1)/2;//小的数字不能超过的中值。
        int sum=start+end;
        while(start<middle){
            if(sum==s)
                printS(start,end);
            if(sum>s&&start<middle){
                sum-=start;
                start++;
            }
            else{
                end++;
                sum+=end;
            }
        }
    }
    public void printS(int start, int end) {
        for(int i=start;i<=end;i++)
            System.out.print(i+" ");
        System.out.println();
        
    }
    public static void main(String[] args){
        int[] a={1,3,4,5,6,7,9};
        int s=9;
        SumEqualsS ss=new SumEqualsS();
        ss.sumEqualsS(a, s);
        ss.printAllSequence(15);
        
    }
}
原文地址:https://www.cnblogs.com/hupp/p/4770889.html