#初学者#力扣第一题“两数之和”C语言详解

题目如上

很多初学者在第一次写这个所谓的“简单”题的时候,都会觉得有点难,其实并不是因为这个东西有多难,而是因为自己不太懂力扣的运行逻辑是什么。

这里简单讲解一下

在一开始的时候会给你一个这样的一串代码

上面那串英文翻译为:

“注意:返回的数组必须是通过malloc分配的,假设调用者会调用free()释放内存.”

基础比较老实的初学者到这里会遇到第一个疑问,就是这个malloc是什么玩意? 这里先暂且不谈,我们先看看下面题目给出的函数里面的几个变量。

分别是nums、numsSize、target、returnSize。这里我先讲解一下这四个

要注意我们是在平台给的一个假定环境里写的代码,题目会给你几个输入用例,而我们要做的就是在这个用例的基础上按照题目的要求写出代码。

如图所示

nums就是题目给的有四个数的数组

numsSize则指的是数组长度,上面这个长度为4,它就是4

target如题所示,是要求返回的两个数的目标值

returnSize是我要返回的数组的大小,因为我要两个返回值,我要给它俩打包在一个数组里面

要注意returnSize指的是返回数组的大小,而非返回数组本身

 

接下来是解答过程 

 

这里回收一下之前的抛出的问题,这个malloc是什么玩意

malloc函数是用于动态内存分配的标准库函数,库为<stdlib.h>

语法为void *malloc(size_t size),void是我要什么类型的,size是我要多大的,size_t则是用来保证我分配的空间不能是负数。


因为是自定义空间,所以要手动释放,就要用到free()函数,但是前面也说了平台假设有一个free。

首先我们先声明一个整形指针变量res(返回数组),然后用malloc函数在堆空间内分出两个字节为整型的空间赋予给res,这样res本身就会变成有着两个整型空间的数组。

题目要求是找出数组内和为目标值的两个数的下标,所以我们接下来暴力一点,直接两层for。

numsSize不用赋值,它本来就有系统给的4,我们只需要通过两层for的两个下标来找出值就行。

因为第一个下标a在逻辑上不可能和第二个下标b相同,所以b下标的初始值设定为[a + 1],这样代码的时间效率会高一些。

在里面塞一个判断,判断下标a的数据加上下标b的数据是否等同于目标值target。

如果找到达到目标的数据,就会把下标a赋值给返回数组res的0位,下标b赋值给第一位。

因为题目要求是要有一个返回数组的长度的,所以随便塞个2就行了,没啥要求纯关系户。

最后再返回res数组,这样就完成了题目的要求。

我们来跑一下看看

说个题外话

前面不是要求返回数组必须是malloc函数分配的吗,这里我用static修饰下返回数组,发现也能通

不知道为啥...

 

 

 

 

 

本人穷鬼,无事投喂

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值