zoukankan      html  css  js  c++  java
  • 在排序数组中查找符合条件的数

    题目:输入一个已经按升序排序过的数组和一个数字,
    在数组中查找两个数,使得它们的和正好是输入的那个数字。
    要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
    例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。

    思路:因为数组是升序排列的(即使没有排序,我们也可以先排下序),所以很简单,设置两个循环变量,左边循环指向数组第一个数的下标,右边循环变量指向数组最后一个数的下标,然后两个数求和与指定的数比较大小,若等于则找到了一组数,推出循环;若大于,则将右边的循环标量往左移一位,继续比较;若小与,则将左边循环变量往右移一位,继续比较,若一直到左边循环变量的值大于右边循环变量的值,则说明此数组中没有哪两个数是符合要求的。

      基于以上分析,代码如下:

     1 void FindPairNumber(int *arr, int N, int nValue)
     2 {
     3     assert (arr != NULL);
     4 
     5     assert (N > 0);
     6 
     7     int i = 0;
     8     int j = N - 1;
     9 
    10     while (i <= j)
    11     {
    12         int nTemp = arr[i] + arr[j];
    13 
    14         if (nValue == nTemp)
    15         {
    16             break;
    17         }
    18         else if (nValue > nTemp)
    19         {
    20             ++i;
    21         }
    22         else
    23         {
    24             --j;
    25         }
    26     }
    27 
    28     if (i > j)
    29     {
    30         cout << "没有哪两个数的和等于 " << nValue << endl;
    31     }
    32     else
    33     {
    34         cout << arr[i] << "" << arr[j] << " 的和等于 "  << nValue << endl;
    35     }
    36 }

      下面给出一些测试结果:

  • 相关阅读:
    windows下载
    vue-element-admin改造步骤
    js处理url
    好用的工具
    数据库设计工具
    虚拟机使用
    Mac上编译C
    MAC系统配置
    SQL语法
    SSMP一次请求数据处理过程分析
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3053191.html
Copyright © 2011-2022 走看看