zoukankan      html  css  js  c++  java
  • 和为S的两个数字

    输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。

    菜鸟的写法是顺序扫描,时间复杂度是O(n2)。下面给出一种大牛的写法,时间复杂度只需O(n)。

     1 //////////////////////和为S的两个数字//////////////////////////////////
     2 
     3 bool FindNumbersWithSum(int* data , int length , int sum)
     4 {
     5     if (data == NULL || length < 2)
     6     {
     7         return false ;
     8     }
     9     int begin = 0 ;
    10     int end = length - 1 ;
    11     while (begin < end)
    12     {
    13         long long CurSum = data[begin] + data[end];
    14         if (CurSum == sum)
    15         {
    16             cout<<data[begin]<<"+"<<data[end]<<endl;
    17             return true ;
    18         }
    19         else if (CurSum > sum)//当前和大于 sum ,end指针向后走一位
    20         {
    21             end--;
    22         }
    23         else //当前和小于 sum ,begin指针向前走一位
    24         {
    25             begin++;
    26         }
    27     }
    28     return false ;
    29 }
  • 相关阅读:
    [BUUCTF]PWN14——not_the_same_3dsctf_2016
    flask cookie
    关于cookie和session
    mysql修改表操作
    MySQL 增删改查
    mysql数据类型
    python读写mysql
    聚合查询
    条件查询
    排序
  • 原文地址:https://www.cnblogs.com/csxcode/p/3737891.html
Copyright © 2011-2022 走看看