-
Notifications
You must be signed in to change notification settings - Fork 0
/
1-两数之和.txt
43 lines (38 loc) · 1.71 KB
/
1-两数之和.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
需求:
给定一个数列,和目标数值,要求从数列中找出两个数相加等于这个目标数值,返回这两个数对应的下标组成的数组指针。
思路:
首先定义一个结果数组(malloc分配的),
将数列中的数两两相加,若等于目标数值,就把这两个下标存进结果数组(是动态分配的结果数组),
遍历数组, 外层循环遍历,
if 外层循环下标!= 内层循环下标
外层下标对应的元素加上内层下标对应的元素,若其值
等于target,则将外层下标和内层下标存入数组(通过数组指针存储)。找到结果了,goto语句跳出双层循环。
QUIT:;
一、创建用于存储结果下标的动态数组
接下来的问题,如何创建一个动态数组(为什么要使用动态数组?
因为动态分配的数组,是在堆里面,可以给上层返回指针。也就是说
在函数内部定义的数组可以通过返回指针在函数外面被访问到。
定义的数组大小为2,因为只需要存储两个下标。
现在假设定义一个动态数组,
int *result = (int*)malloc((*returnSize)*sizeof(int));
if result != NULL;then
进行下面的处理流程;
else
printf("Sorry, the malloc failed to apply a memory!");
return result;
二、
遍历数组,
使用for循环
for(int i=0; i<numSize; i++)
for(int j=0; j<numSize; j++)
{
if (i != j)
{
if(nums[i] + nums[j] == target)
{
result[0] = i;
result[1] = j;
}
}
}
另外,我们使用的动态数组不需要重新调整大小,因为我们使用动态数组是为了让外部可以访问函数内创建的数组,堆上分配的数组在函数运行结束时不会随着栈空间的消失而消失。