zoukankan      html  css  js  c++  java
  • 剑指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);
            
        }
    }
  • 相关阅读:
    leetcode203
    leetcode88
    leetcode219
    leetcode225
    2018-12-25-C#-使用转换语义版本号
    2018-12-25-C#-使用转换语义版本号
    2018-10-15-Winforms-可能遇到的-1000-个问题
    2018-10-15-Winforms-可能遇到的-1000-个问题
    2018-8-10-UWP-WPF-解决-xaml-设计显示异常
    2018-8-10-UWP-WPF-解决-xaml-设计显示异常
  • 原文地址:https://www.cnblogs.com/hupp/p/4770889.html
Copyright © 2011-2022 走看看