题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解答
int* twosum(int* nums,int numSsize,int target,int* returnSize)
{
int a[2];
for(int i=0;i<=numSsize;i++){
for(int j=i+1;j<=numSsize;j++){
if(nums[i]+nums[j]==target){
a[0]=i;
a[1]=j;
return a;
}
}
}
return a;
}
输出结果:
暴力法很简单,遍历每个元素 x,并查找是否存在x+y=target的两个元素x,y,返回其下标,将其下标存入a这个数组。
完整代码可以这样写:
#include<stdio.h>
int* twosum(int* nums,int numSsize,int target,int* returnSize)
{
static int a[2];//定义一个长度为2的数组,用来存放下标
for(int i=0;i<=numSsize;i++)//第一个循环
{
for(int j=i+1;j<=numSsize;j++)//二层循环
{
if(nums[i]+nums[j]==target)//判断两个数的值是否与目标相等
{
a[0]=i;//将第一个元素的下标存入a[0]
a[1]=j;//将第二个元素的下标存入a[1]
printf("[%d,%d]\n",a[0],a[1]); //打印
}
}
}
return a;
}
int main(int argc, const char *argv[])
{
int nums[]={2,7,11,15};//目标数组
int returnum[2];
int target=9;//目标
twosum(nums,4,9,returnum);
return 0;
}