前言
有人夜里挑灯看花,有人相爱,有人夜里开车看海,有人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;