zoukankan      html  css  js  c++  java
  • 35. 判断和等于给定整数的两个数是否存在

    一. 问题

    给定一个整数 c 和一个下标从 1 到 n 的数组 A,A 中的元素是范围 1 到 5n(可能有重复)的 n 个整数。描述一个有效算法来确定 A 中是否存在两个整数 A[ i ] 和 A[ j ] ,其和为 c,即 c = A[ i ] + A[ j ], 1 ≤ i < j ≤ n。算法的运行时间是多少?

    二. 思路

    用简洁的话重新表述一下问题:在序列是否存在两个数,它们的和等于给定的整数,若存在,返回 true,不存在,返回 false。

    我们考虑暴力解法,先固定一个数,然后依次查找另外一个数,判断这两个数的和是否等于给定整数。这样遍历序列找出结果,时间复杂度为 O(n2)。

    三. 代码实现

     1 bool is_two_num_exist(const vector<int>& data, int sum) {
     2     for (int i = 0; i < data.size(); ++i) {
     3         for (int j = i + 1; j < data.size(); ++j) {
     4             if ((data[i] + data[j]) == sum) {
     5                 return true;
     6             }
     7         }
     8     }
     9 
    10     return false;
    11 }

    显然,该暴力解法并不是最好的方法。算法的时间复杂度并不好看,还需优化。

  • 相关阅读:
    L-这是最难的题(二分+前缀和)
    SPFA 原理剖析代码实现分析比较
    树状数组---原理代码实现
    bellman-ford算法
    UML用例图总结
    UML类图几种关系的总结
    UML序列图总结
    线段树--Color the ball(多次染色问题)
    临时文档3
    POJ2676-Sudoku(数独)
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/13556416.html
Copyright © 2011-2022 走看看