1.两数之和

leetcode算法学习,打算每日1篇

自己写的代码太low就不上了,主要是对最优代码的注释和自己的小小理解

题目


思路
1.确定取值范围
2.范围内查看有没有匹配的数字
代码

int* twoSum(int* nums, int numsSize, int target) {
    
    //第1步:找到最小的数
    int min = 2147483647;
    int i = 0;
    for (i = 0; i < numsSize; i++) {
        if (nums[i] < min)
            min = nums[i];
    }
    //第2步:确定取值范围
    int max = target - min;
    int len = max - min + 1;
    int *table = (int*)malloc(len*sizeof(int));
    int *res = (int*)malloc(2*sizeof(int));
    for (i = 0; i < len; i++) {
        table[i] = -1;
    }
    //第3步:*确认符合条件数字位置
    for (i = 0; i < numsSize; i++)
    {
        if (nums[i]-min < len) {//3.1:是否在范围内
            //3.3:这是第3步,因为一开始不会执行,和第二步相呼应。
            if (table[target-nums[i]-min] != -1)//需求值-当前值获得的下标如果能在数组内找到,则证明找到了答案
            {
                res[0] = table[target-nums[i] - min];
                res[1] = i;
                return res;
            }
            table[nums[i] - min] = i;//3.2:减去min使下标能存放进数组
        }
    }
    free(table);
    return res;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://leetcode-cn.com/problems/two-sum/description/给定一个...
    带肥肉的羊肉串阅读 150评论 0 0
  • 题目: 给定一个整数数列,找出其中和为特定值的那两个数。 你可以假设每个输入都只会有一种答案,同样的元素不能被重用...
    Missmiss懵阅读 248评论 0 0
  • 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被...
    WindMajor阅读 233评论 0 0
  • 申请入驻今日头条 本人媒体名称:汽车记 请求审核通过!!! 最近有个粉丝问小欧,怎样才能选辆令自己满意...
    汽车记阅读 384评论 0 0
  • 今天陪客户,回到家已经十一点了。本来想今天不日更了,明天早上还要送客户去车站。不过在我躺下之后我拿起手机,反正也要...
    杨树夏阅读 195评论 1 2