暴力解法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
for(int i= 0; i < nums.size(); i ++) {
for (int j = i +1; j < nums.size(); j ++) {
if (nums[j] == target - nums[i]) {
res.push_back(i);
res.push_back(j);
}
}
}
return res;
}
};
时间复杂度:$O(n \log n)$,过不了。
空间复杂度:$O(n)$
C++ unordered_map解法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hash;
vector<int> vec;
for (int i =0;i < nums.size(); i ++) {
if (hash.count(target - nums[i]) > 0) {
vec.push_back(i);
vec.push_back(hash[target-nums[i]]);
return vec;
} else {
hash[nums[i]]= i;
}
}
return vec;
}
};
时间复杂度:$O(n \log n)$
空间复杂度:$O(n)$
Java HashMap解法
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i ++) {
int y = target - nums[i];
if (map.containsKey(y) && map.get(y) != i) {
int idx = map.get(y);
int res[] = {i, idx};
return res;
} else {
map.put(nums[i], i);
}
}
return new int[]{};
}
}
时间复杂度:$O(n \log n)$
空间复杂度:$O(n)$