leetcode01.
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
- C++解法
vector<int> twoSum(vector<int> &nums,int target)
{
vector<int> result;
map<int,int> maps;
int count=nums.size();
for (int i=0;i<count;i++) {
int complement=target-nums[i];
if (maps.find(complement)!=maps.end()) {
result.push_back(maps[complement]);
result.push_back(i);
}
maps[nums[i]]=i;
}
return result;
}
- C解法
int* twoSum(int* nums, int numsSize, int target) {
int min = nums[0];
int i = 0;
for (i = 0; i < numsSize; i++) {
if (nums[i] < min)
min = nums[i];
}
int max = target - min;
int len = max - min + 1; //确定hash长度
int *table = (int*)malloc(len*sizeof(int));
int *indice = (int*)malloc(2*sizeof(int));
for (i = 0; i < len; i++) {
table[i] = -1; //hash初值
}
for (i = 0; i < numsSize; i++) {
if (nums[i]-min < len) {
if (table[target-nums[i]-min] != -1) { //满足相加为target
indice[0] = table[target-nums[i] - min];
indice[1] = i;
return indice;
}
table[nums[i]-min] = i;
}
}
free(table);
return indice;
}
- python3解法
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
keys = {}
for i in range(len(nums)):
if target - nums[i] in keys:
return [keys[target - nums[i]], i]
if nums[i] not in keys:
keys[nums[i]] = i