题解 | #和为S的两个数字#
和为S的两个数字
https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array, int sum) {
vector<int> v;
if (sum == 0) {
return v;
}
int left = 0, right = array.size();
for (int i = 0; i < array.size() - 1 && array[i] < sum; ++i) {
// 查找第二个数时使用二分查找减少时间复杂度
int left = i + 1, right = array.size() - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (array[mid] < sum - array[i]) {
left = mid + 1;
} else if (array[mid] > sum - array[i]) {
right = mid - 1;
} else {
v.push_back(array[i]);
v.push_back(array[mid]);
return v;
}
}
}
return v;
}
};
