题目
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.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
C语言
自己的遍历解法
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target) {
for (int i=0; i<numsSize;i++) {
for (int j=i+1; j<numsSize; j++) {
if (nums[i] + nums[j] == target) {
static int ret[2] = {0,0};
ret[0] = i;
ret[1] = j;
return ret;
}
}
}
return 0;
}
// 太久没写c有点手生
// static 不加报错,暂时未明白为什么TODO
网上资料
使用malloc动态建立数组,map[]作为映射表
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target) {
int min = 2147483647;
for (int i = 0; i < numsSize; i++){//找到数组中最小的一个数
if (nums[i] < min){
min = nums[i];
}
}
int max = target - min;
int len = max - min + 1;
int *map = (int*)malloc(len*sizeof(int));//建立映射表
int *ret = (int*)malloc(2*sizeof(int));
for (int i = 0; i < len; i++){//初始化映射表1
map[i] = -1;
}
for (int i = 0; i < numsSize; i++){
if (nums[i] - min < len){
map[nums[i] - min] = i;
}
}
for (int i = 0; i < numsSize; i++){
if (nums[i] - min < len){//筛去所有不符合条件的数字,比如说:target= 9;min = 2;8就不符合。都不用进判断
if (map[target - nums[i] - min] != -1){ //判断相加是否是target
ret[0] = i;
ret[1] = map[target - nums[i] - min];//map的value里面存的是满足条件的数在数组中的下标
if(ret[0] != ret[1])return ret;
}
}
}
return NULL;
}
Python
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(len(nums)):
if target-nums[i] in nums:
j = nums.index(target-nums[i])
if i != j:
result = [i, j]
return result
return null
网上参考,利用字典
dict={}
for i in range(len(nums)):
if target-nums[i] in dict:# target-nums[i]为key
return [dict[target-nums[i]],i]
dict[nums[i]]=i
return []
--------------新手刷题,仅用于自身记录,如有错误,欢迎指出---------------