两数求和
1.原题目
题目
LeetCode题库的第1题题目为:
给定一个整数数组nums
和一个整数目标值target
,请你在该数组中找出和为目标值target
的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
return 0;
}
示例
输入:nums = [2,7,11,15]
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9,所以返回 [0,1]
2.思路解析
分析题目后我们可以考虑使用枚举的方法暴力求解。在nums
数组中设变量i
为第一个数,变量j
为第二个数,如果两个变量值相加值等于目标值则进行输出;如果不相等则j
等于下一个数再次进行比较,直到等于目标值后进行输出。
3.具体操作
如果我们想要遍历整个数组我们就需要一个嵌套的for
循环,然后用if
语句进行判断,如果成立则返回结果。
具体每一步的解释见注释:(为简便不再写出题目已给部分)
int i = 0;
for(i = 0; i < numsSize-1; i++) //numsSize为 nums数组最后一个数,即i可以是从第一个到倒数第二个数
{
int j = 0
for(j = i + 1; j < numsSize; j++)//让 j=i+1可以避免使用两次相同的元素并减少对比次数,提高效率
{
if(nums[i] + nums[j] == target)//进行判断,如果数组中下标为i、j的数相加和为 target,则进行下一步
//如果不相等则继续循环
{
int* ret = malloc(sizeof(int) * 2);//分配两个整数的空间
ret[0] = i, ret[1] = j;//将得到的 i、j放入数组 ret中
*returnSize = 2;//声明返回数组大小为2
return ret;//返回值 ret
break;//因为只有一个对应答案,所以可以直接退出循环,提高效率
}
}
}
如此便是整个解题过程,代码可以通过,可以看出结果还是很不错的
如果还有哪里不懂的地方也欢迎留言,也可以去LeetCode上寻找其他大佬的解释。
以上是本人对这道题的一些见解,如有错误或改进之处也欢迎留言给作者,感谢观看。
标签:题目,target,nums,int,题解,LeetCode1,ret,数组,两数 From: https://blog.csdn.net/2401_88266383/article/details/144800253