本题时间复杂度没有优化到最好,只能算通过,如果直接进行两重for循环,时间复杂度较高。
首先将每一个vector中的数进行遍历,使用target做差之后,再在剩下的数据中进行二分查找,时间复杂度为O(nlog(n))。
代码如下:
vector<int> twoSum(vector<int>& nums, int target){
vector<int> result;
for(int i = 0;i < nums.size();i++){
int a = target - nums[i];
int low = i,high = nums.size()-1;
int mid = (high + low)/2;
while(low <= high){
if(nums[mid] == a && nums[mid] != nums[i]){
result.push_back(nums[i]);
result.push_back(a);
return result;
}
if(nums[mid] < a){
low = mid + 1;
mid = (low + high)/2;
}
if(nums[mid] > a){
high = mid - 1;
mid = (low + high)/2;
}
}
}
return result;
}