一、对于刚做leedcode的初使用者应注意的事项
第一点、leedcode给你的代码,就是你平时所写的代码的一个函数,需要你去完善那个代码里面的内容,给你的括号里面的几个参数,是已知的,都是需要用上的,所以不需要你写输入的函数。
第二点、注意返回值。要注意所给函数的返回类型和参考案例里面的输出,基本上就是你需要的返回值的相关信息。
第三点、若是要返回数组有两种方法,利用已知数组返回或者是重新开辟一块空间(使用malloc)给数组,让其返回。
第四点、没有必要在意参考案例中的输入和输出的格式,你只要返回所需要的正确的值即可,不需要在意他的格式,系统给会自动给你弄好的。
第一题:两数之和
【题目】
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
【已知代码】
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
}
【参考示例】
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
对题目的刨析:
(已知信息):给定一个整数数组 nums和它的长度numsSize 、一个整数目标值 target,
和返回值需要的长度returnSize。
(要求条件):1.在该数组中找出 和为目标值 target 的那 两个 整数。
2.返回它们的数组下标。
3.数组中的同一个元素在答案里不能重复出现
【关于我的解题思路】
由第一个条件我们可以知道,应该去设两个变量( i 和 j ),分别指向和为目标值的那两个整数。并且应该使用循环(我个人喜欢用for循环)去找出两个整数。
由第二个条件可以知道他要返回的是数组,但是已知的数组不好使用,所以我们只能选择自己去开辟一块新的数组空间(使用malloc),它的长度是2*sizeof(int),只需要开辟能够存放两个整数的数组空间即可。
由第三个条件告诉我们i和j不能为相同的值,就是告诉我们循环的一个条件。
解答:
【思路】
用两个循环,第一个循环(for)指向的是返回的第一个值的位置,在嵌套一个循环(for),指向的是返回的另一个的值的位置。然后再判断(if)两个值是否和目标值相等。若是相等(==),就需要给他开辟一块新的数组空间(malloc)存放所要返回的两个值。然后还有一个已知的值returnSize没用上,就告诉它返回值的长度,即2。如果没有与目标值相等的(if),即returnSize为0,即可。
当然,这是我的思路,每个人有每个人不通过的思路,你可以自己去探索出不同的办法解题。
【代码】
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int i=0;
int j=0;
int *result=NULL;
for(i=0;i<numsSize;i++)
{
for(j=i+1;j<numsSize;j++)
{
if(nums[i]+nums[j]==target)
{
result=(int*)malloc(sizeof(int)*2);
result[0]=i;
result[1]=j;
*returnSize=2;
return result;
}
}
}
*returnSize=0;
return result;
}