zoukankan      html  css  js  c++  java
  • 常见算法之2---排序数组中和为给定值的两个数字

    题目:有一个升序的数组a和一个数字N,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。

    示例:数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

    方案一:穷举遍历法,一个个比对查找,但这种方法没有好好利用有序这个条件。时间复杂度为O(n*n)。 

    方案二

    基本思路:找到两个数,将其和与N进行对比,并不断调整。

    实现方法:找到数组的第一个数字和最后一个数字。当两个数字的和大于输入的数字时,把较大的数字往前移动;当两个数字的和小于数字时,把较小的数字往后移动;当相等时,打完收工。当前后两个指标最后相遇时还没有找到,证明不存在解。

    本质上:是根据当前和的大小,逐步地以最小的步长去向目标靠拢,除非不存在解,否则一定可以找到。

    代码:       

            int small=0;          //初始时,分别指向第一个和最后一个下标。
            int big=a.length-1;        
            
            while(small != big){
                if(a[small]+a[big] == N){
                    print(a[small]+","+a[big]);
                    break;
                }
                if(a[small]+a[big] > N)
                    big--;
                if(a[small]+a[big] < N)
                    small++;
            }

     

  • 相关阅读:
    Sass代码重用----Sass继承
    Sass代码重用
    Scss基本运算-------颜色运算
    Scss基本运算-------字符运算
    Scss基本运算-------数字运算
    7.Scss的基本运算
    6.Scss注释
    css横竖屏判断
    禁止页面缩放及meta便签常用属性
    微信小程序 错误记录
  • 原文地址:https://www.cnblogs.com/xiaoChongUp/p/3243247.html
Copyright © 2011-2022 走看看