NC275. 和为S的两个数字
描述
示例1
输入:
[1,2,4,7,11,15],15
输出:
[4,11]
说明:
返回[4,11]或者[11,4]都是可以的示例2
输入:
[1,5,11],10
输出:
[]
说明:
不存在,返回空数组示例3
输入:
[1,2,3,4],5
输出:
[1,4]
说明:
返回[1,4],[4,1],[2,3],[3,2]都是可以的示例4
输入:
[1,2,2,4],4
输出:
[2,2]
C++ 解法, 执行用时: 10ms, 内存消耗: 2064KB, 提交时间: 2022-03-17
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false);//关闭输入输出 std::cin.tie(nullptr);//取消两个stream绑定 std::cout.tie(nullptr);//取消cin 和 cout之间的绑定,加快执行效率 return nullptr; }(); class Solution { public: vector<int> FindNumbersWithSum(vector<int>& array,int sum) { if(array.empty()) return {}; int l = 0, r = array.size()-1; while(l < r) { int s = array[l] + array[r]; if(s < sum) { int l0 = l, r0 = r; while(l0 < r0) { int mid = l0 + r0 >> 1; if (array[mid] < sum - array[r]) { l0 = mid + 1; } else { r0 = mid; } } l = l0; } else if (s > sum){ int l0 = l, r0 = r; while(l0 < r0) { int mid = l0 + r0 + 1 >> 1; if (array[mid] <= sum - array[l]) { l0 = mid; } else { r0 = mid - 1; } } r = l0; } else { return vector<int>{array[l], array[r]}; } } return {}; } };
C++ 解法, 执行用时: 11ms, 内存消耗: 2388KB, 提交时间: 2022-06-22
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false);//关闭输入输出 std::cin.tie(nullptr);//取消两个stream绑定 std::cout.tie(nullptr);//取消cin 和 cout之间的绑定,加快执行效率 return nullptr; }(); class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { int left = 0, right = array.size() - 1; while (left < right){ if (array[left] + array[right] == sum) return vector<int>({array[left], array[right]}); else if (array[left] + array[right] > sum) right--; else left++; } return vector<int>(); } };
C++ 解法, 执行用时: 11ms, 内存消耗: 2424KB, 提交时间: 2022-03-12
static int x=[]{ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0; }(); class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { int i=0,j=array.size()-1; vector<int> ans(0); if(array.size()==0)return ans; while(i<j){ if(array[i]+array[j]<sum) i++; else if(array[i]+array[j]>sum) j--; else { ans.push_back(array[i]); ans.push_back(array[j]); return ans; } } return ans; } };
C++ 解法, 执行用时: 11ms, 内存消耗: 2444KB, 提交时间: 2022-05-07
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false);//关闭输入输出 std::cin.tie(nullptr);//取消两个stream绑定 std::cout.tie(nullptr);//取消cin 和 cout之间的绑定,加快执行效率 return nullptr; }(); class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { if(!array.size()) { return {}; } int low=0,high=array.size()-1; int x; while(low<high) { x = array[low] + array[high]; if(x > sum) high--; else if(x < sum) low++; else return {array[low],array[high]}; } return {}; } };
C++ 解法, 执行用时: 11ms, 内存消耗: 2444KB, 提交时间: 2022-04-01
static const auto io_sync_off = []() { std::ios::sync_with_stdio(false);//关闭输入输出 std::cin.tie(nullptr);//取消两个stream绑定 std::cout.tie(nullptr);//取消cin 和 cout之间的绑定,加快执行效率 return nullptr; }(); class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { if (array.empty()) return {}; auto left = array.begin(); auto right = array.end() - 1; while (left < right) { int tmp = *left + *right; if (tmp == sum) return {*left, *right}; else if (tmp > sum) --right; else ++left; } return {}; } };