我的答案:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> v(2,0);
for (int i = 0; i < nums.size(); i++){
for (int j = i+1; j < nums.size(); j++){
if (nums[i] + nums[j] == target){
v[0] = i;
v[1] = j;
return v;
}
}
}
}
};
时间复杂度为
O(n2)
O
(
n
2
)
使用哈希表(Hash Table)可以降低时间复杂度,方法如下:
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
map.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement) && map.get(complement) != i) {
return new int[] { i, map.get(complement) };
}
}
throw new IllegalArgumentException("No two sum solution");
}
或
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
时间复杂度
O(n)
O
(
n
)
空间复杂度
O(n)
O
(
n
)