• 剑指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);
            
        }
    }
  • 相关阅读:
    002-mybatis主配置文件
    001-mybatis框架
    mybatis学习
    tcp连接与释放
    浏览器输入url的全过程
    设备
    读写分离(三)
    读写分离(二)
    读写分离(一)
    主从复制(三)
  • 原文地址:https://www.cnblogs.com/hupp/p/4770889.html
Copyright © 2020-2023  润新知