题目如上
很多初学者在第一次写这个所谓的“简单”题的时候,都会觉得有点难,其实并不是因为这个东西有多难,而是因为自己不太懂力扣的运行逻辑是什么。
这里简单讲解一下
在一开始的时候会给你一个这样的一串代码
上面那串英文翻译为:
“注意:返回的数组必须是通过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修饰下返回数组,发现也能通
不知道为啥...
本人穷鬼,无事投喂