zoukankan      html  css  js  c++  java
  • 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数使得它们的和正好是输入的那个数字

     1 /*
     2 *题目:输入一个已经按升序排序过的数组和一个数字,
     3 *在数组中查找两个数,使得它们的和正好是输入的那个数字。
     4 *要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
     5 *例如输入数组 1、2、4、7、11、15 和数字 15。由于 4+11=15,因此输出 4 和 11。
     6 */
     7 #include <utility>
     8 #include <iostream>
     9 #include <cassert>
    10 using namespace std;
    11 
    12 pair<bool, pair<int, int> > find_pair(int *array, int len, int x)
    13 {
    14     assert(array);
    15 
    16     int *p1, *p2;
    17     p1 = array, p2 = array+len-1;
    18     while(p1 < p2)
    19     {
    20         if(*p1 + *p2 == x)
    21             break;
    22         else if(*p1 + *p2 < x)
    23             ++p1;
    24         else
    25             --p2;
    26     }
    27     return p1 < p2 ? make_pair(true, make_pair(*p1, *p2)) : make_pair(false, make_pair(*p1, *p2));
    28 }
    29 int main(int argc, char const *argv[])
    30 {
    31     pair<bool, pair<int, int> > res;
    32     int array[] = {1, 2, 4, 7, 11, 15};
    33     res = find_pair(array, sizeof(array)/sizeof(int), 15);
    34     if(res.first)
    35         cout<<res.second.first<<" + "<<res.second.second<<" = "<<15<<endl;
    36     else
    37         cout<<"not found!"<<endl;
    38     return 0;
    39 }
  • 相关阅读:
    memcache
    memcache 杂记
    mysql_函数
    MySQL_存储过程
    MySQL_视图
    mysql _触发器
    MySQL_优化
    mysql_索引
    R语言编程艺术_第六章_因子和表
    Bioinfo:学习Python,做生信PartII 学习笔记
  • 原文地址:https://www.cnblogs.com/zxh1210603696/p/3282078.html
Copyright © 2011-2022 走看看