一、题目
给定一个数组nums和一个目标值target,请你再该数组中找出和为目标值的那两个数,并返回数组的下标,你可以假设输入只会对应一个答案,但是数组的同一个元素不能使用两次。
二、解题思路
目的就是要求出两数之和等于目标值嘛。
就是把第一个数和后面 n-1 个数进行相加看那些等于目标值,第二个数个后面的 n-2 个数相加等于目标值…
我们可以画一个图来表示:
这样看起来就简单一些
三、代码
这个参数returnSize 看了半天
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int *a=(int*)malloc(sizeof(int)*2);
for(int i=0;i<numsSize-1;i++)
{
for(int j=i+1;j<numsSize;j++)
{
if(nums[i]+nums[j]==target)
{
a[0]=i;
a[1]=j;
*returnSize=2; //返回的数组大小为2
return a; //返回数组
}
}
}
return 0;
}
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
# 定义字典
dict = {}
# 把数组里面的值进行枚举
# 通过去判断 目标值与列表中的元素差值在不在字典中来判断
for i, m in enumerate(nums):
if dict.get(target - m) is not None:
return [i, dict.get(target - m)]
dict[m] = i