Leetcode: 1. 两数之和 【题解超详细】

前言

有人夜里挑灯看花,有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。

希望下面的题解可以帮助你们开始  你们的 leetcode 刷题 的 天降之路 

题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

难度:简单

题目链接:1. 两数之和

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

题目解析

当你看到这个题的时候 请答题手 不要犹豫,直接进行暴力解题直接来两层for循环

第一层循环 就是从数组的下标 0 开始 (即第一个元素开始 与 第二层的for的循环的第二个元素进行相加 来判断  是否等于目标值 ) 找到 两个数的下标 相加后等于目标值  注意返回数组的大小 ,还有就是返回数组

代码展示

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    int* arr = (int*)malloc(sizeof(int) * 2);
    int i = 0;
    int j = 0;
    for (i = 0; i < numsSize; i++)
    {
        for (j = i + 1; j < numsSize; j++)
        {
            if (nums[i] + nums[j] == target)
            {
                arr[0] = i;
                arr[1] = j;
            }
        }
    }
    *returnSize = 2;
    return arr;
}

代码超详解析 

第一代码就是 使用 动态内存malloc 动态分配空间。

int* arr = (int*)malloc(sizeof(int) * 2);

随后就是 两层for循环 进行暴力解题

第一层for循环我们就是 按照数组下标进行来  [0, numsSize-1] 其实就是遍历 numsSize个元素,  i的取值范围就是 [ 0 , numsSize-1 ] 这样就可以进行遍历整个数组的元素

第二层的循环就是 从 i +1 开始,范围是[ i+1 , numsSize-1 ].

这样自就可以让 第一个元素 开始 依次和后面的元素相加进行判断

比如 从 第一个元素开始 : 第一个元素加上第二个元素 判断是否等于目标值(target),如果不等于就让 第一个加上第三个元素 来进行判断 ……直到找到两个合适的。

    for (i = 0; i < numsSize; i++)
    {
        for (j = i + 1; j < numsSize; j++)
        {
            if (nums[i] + nums[j] == target)
            {
                arr[0] = i;
                arr[1] = j;
            }
        }
    }

注意这里要用 上述创建的数组来接收,这样就方便返回数组。

这里的 * returnSize = 2; 一定要记得写上,表示返回数组的大小。 

最后两行的代码一定不要忘记

    *returnSize = 2;
    return arr;

 

猜你喜欢

转载自blog.csdn.net/qq_72505850/article/details/132604603
今日推荐