描述:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
题库链接:两数之和
分析:
遍历数组,我们要做的事情就是判断数组里面任意组合的俩数相加之和是否为target,是的话,保存下标,返回回去就可以了,不是则继续遍历。两数相加之和表示为x+y=sum;例如给定的例子中,四个数,当x=2时,那么y只能取7,11,15,因为要求同样的元素不能被重复利用,且题目说明了假设只对应一种情况,所以找到一种x+y=sum的情况后,停止,不需要找了;当x=7时,y只可以取11,15,因为2的情况当x=2时,已经遍历过了。当x=11,x=15就不举例子了。大概的思想就是这样的。所以我们会用循环嵌套。
注意:
要求是返回俩值,所以用指针了。
#include<stdio.h>
#include<stdlib.h>
int* twoSum(int* nums, int numsSize, int target)
{
int flag=0; //标记是否找到,0未找到
int *temp = (int*)malloc(sizeof(int)*8); //用于保存等会返回的值
for(int i=0;i<numsSize-1;i++) //进行数组遍历,注意是numsSize-1,防止数组越位
{
for(int j=i+1;j<numsSize;j++) //注意这里是j=i+1
{
if(nums[i]+nums[j]==target) //找到后则保存起来,且标记
{
temp[0]=i;
temp[1]=j;
flag=1;
break;
}
}
if(flag==1) //仅仅一个答案,所以找到了就别找了
break;
}
return temp; //返回指针
}
如果有问题的话可以联系我,如果有错误的话,欢迎指正,谢谢!