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;
}

你可能感兴趣的:(1.两数之和)