1. Two sum
Given an array of integers, find two numbers such that they addup to a specific target number.
The function twoSum should return indices of the two numberssuch that they add up to the target, where index1 must be less than index2.Please note that your returned answers (both index1 and index2) are notzero-based.
Youmay assume that each input would have exactly one solution.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1,index2=2
方法一:暴力法,复杂度(n^2),系统会判定超时,顾不采用
class Solution {
public:
vector<int>twoSum(vector<int> &numbers, int target) {
vector<int>result;
for(intindex1=0;index1!=numbers.size();index1++){
for(intindex2=index1+1;index2!=numbers.size();index2++){
if(numbers[index1]+numbers[index2]==target){
result.push_back(index1+1);
result.push_back(index2+1);
break;
}
}
}
return result;
}
};
方法二:使用hash表解决问题
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
unordered_map<int,int> imap;
vector<int> result;
int length=numbers.size();
for(int i=0;i<length;i++){
imap[numbers[i]]=i;
}//给hashmap各键值赋值
for(int i=0;i<length;i++){
const int distance=target-numbers[i];
if(imap[distance]>i && imap[distance]<length)
{
result.push_back(i+1);
result.push_back(imap[distance]+1);
break;
}
}
return result;
}
};
java版
public class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
int[] res = new int[2]; //int[] res = {0.0};
for(int i=0;i<nums.length;i++){
if(map.containsKey(nums[i])){ //nums[i]与已知的数互补
res[0] = map.get(nums[i]); //得到互补数的index
res[1] = i;
return res;
}
else{
map.put(target-nums[i], i);
}
}
return null;
}
}
python版
null