0%

LeetCode 1. Two Sum

題目連結: Two Sum - LeetCode

前言

最近想說來寫一下許多人推薦的 LeetCode。

想法

我是用 pair 額外儲存陣列中元素的 index ,並用排序加上二分搜的方法。因為這題的 n 最多是 10000,我不確定 O(n^2) 的演算法會不會過,所以就決定用 O(nlog(n)),…一個比較保險的概念。

code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<pair<int,int>> v(nums.size());
for(int i=0;i<nums.size();++i){
v[i].first=nums[i];
v[i].second=i;
}
sort(v.begin(),v.end());

vector<int> ret;
for(int i=0;i<nums.size();++i){
int a=v[i].first;
int it=lower_bound(v.begin()+i+1,v.end(),make_pair(target-a,0))-v.begin();
if(it>=nums.size()) continue;
int b=v[it].first;
if(a+b==target){
ret.emplace_back(v[i].second);
ret.emplace_back(v[it].second);
return ret;
}
}
return ret;
}
};