(看懂LeetCode)1. 两数之和

一、绪

        由于这段时间,杭电acm网站莫名就崩了,所以我就开始在LeetCode网开始我的新征程啦!
        其实一年前,我就接触过LeetCode网,但是当时我完全不明白要怎么编出怎样的程序来满足题意。包括我现在重新再看LeetCode网的评论时,去寻找怎么读懂题意的方法,但是评论区不乏像“看不懂”、“大三连第一题都看不懂”、“研一连第一题都看不懂”的此类评论。
        其实,就我本人做过其它刷题网站(杭电acm等网站)的经验来讲,LeetCode有挺多不太一样的地方。比如说,它不会告诉你输入输出严格按什么格式来,你只能依靠注释和参数、一些过程去判断怎么编程。而且不同编程语言,它会对你的编程有不同的具体要求。这些特别之处,还需要在后续的刷题过程中慢慢体会,适应。
        所以,我决定在这里记录一下我的做题历程吧,供其他人看懂LeetCode网。

二、两数之和

链接: 两数之和.

(一)题目描述

        给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

解释:题目描述已经很清晰了,并且将该题本来应该有的难度大大降低了。大家只要把数组里的相加之和等于target值得两个数字的下标返回即可。不需要考虑有多种满足结果组合的情况,也不需要考虑下标的返回顺序问题。但是,注意两个数字不能是同一个下标位置的数字,必须是在数组内两个不位置的元素。
        在这个理解下,我们就可以开始解题了!

解题思路

  1. 这里我使用的编程语言是C语言,算法采用的是暴力解法。
  2. 将编程语言设置为C语言时,就会出现下图:
    在这里插入图片描述
    这里告诉我们什么信息呢?
    (1)注释:必须采用malloc函数为返回的数组分配内存
int* twoSum(int* nums, int numsSize, int target, int* returnSize)

(2)int* twoSum(…)说明返回值是一个指针,即存放两个结果下标的数组;
(3)括号里有四个形参,分别是nums数组、nums数组长度、target值,最后一个是returnSize特地用了指针接实参,说明是想要改变或从twoSum中得到除结果数组以外的一个整型值,见名知意,应该就是记录结果数组的长度。通过前面的题意解释,我们知道这个结果数组的长度应该等于2,对应两个需要返回的下标值。

(二)AC代码

        在满足了解题思路后,我终于成功通过了。果然,LeetCode挺不一样的,它不要求你写出完整代码,只需要你写出能够运算出满足题意结果的函数即可。代码如下:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int* array=NULL;
    for(int i=0;i<numsSize-1;i++){
        for(int j=i+1;j<numsSize;j++){
            if(nums[i]+nums[j]==target){
                array=(int *)malloc(2*sizeof(int));
                array[0]=i;
                array[1]=j;
                 *returnSize = 2;
                return array;
            }
        }
    }
    return array;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peng_YuJun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值