您的位置:首页 > 其它

[leetcode] 1.two sum

2018-03-24 20:50 393 查看
题目链接
解法1:O(n^2) beats 27.74%

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
for(int i = 0; i < nums.size(); i++){
for(int j = i + 1; j < nums.size(); j++){
if(nums[j] == target - nums[i]){
result.push_back(i);
result.push_back(j);
return result;
}
}
}
}
};


解法2: O(nlogn) beats 52.44%

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
map<int, int> cnt;
for(int i = 0; i < nums.size(); i++){
cnt[nums[i]] = i;
}
for(int i = 0; i < nums.size(); i++){
if(cnt.count(target - nums[i]) != 0 && cnt[target - nums[i]] != i){
result.push_back(i);
result.push_back((cnt.find(target - nums[i]))->second);
return result;
}
}
}
};

解法三:O(n) beats 98.88% 思路hash

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int delt = 49999, cnt[99999] = {0};
for(int i = 0; i < nums.size(); i++){
cnt[nums[i] + delt] = i;
}
for(int i = 0; i < nums.size(); i++){
if(cnt[target - nums[i] + delt] != 0 && cnt[target - nums[i] + delt] != i){
return vector<int> {i, cnt[target - nums[i] + delt]};
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: