关于用C语言刷leedcode的第一题

文章介绍了在LeetCode平台上解决两数之和问题的思路和方法,包括使用双指针遍历数组,找到和为目标值的两个数,以及使用malloc动态分配内存来存储结果。强调了返回值类型、数组处理和避免重复元素的重要性。
摘要由CSDN通过智能技术生成

一、对于刚做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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值