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 }

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

原文地址:https://www.cnblogs.com/Hello-Nolan/p/13556416.html