leecode学习(1)

一、题目

给定一个数组nums和一个目标值target,请你再该数组中找出和为目标值的那两个数,并返回数组的下标,你可以假设输入只会对应一个答案,但是数组的同一个元素不能使用两次。

二、解题思路

目的就是要求出两数之和等于目标值嘛。
就是把第一个数和后面 n-1 个数进行相加看那些等于目标值,第二个数个后面的 n-2 个数相加等于目标值…
我们可以画一个图来表示:

leecode学习(1)_第1张图片

这样看起来就简单一些

三、代码

这个参数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

你可能感兴趣的:(C语言学习,学习,算法)