题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
来源:力扣(LeetCode)
分析
计划采用暴力求解法解决该问题,时间复杂度为O(n^2):
1)对源数组进行遍历,每个数组值均于该下标后面的数组值一一比对,若两个值之和等于目标值,则将结果存放到结果数组并结束循环。
2)若遍历结束未找到符合的结果,则返回0.
代码
力扣上测试并通过的代码:
// 源数组 原数组大小 目标值 返回值大小
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int i=0,j=0;
int *a = (int*)malloc(sizeof(int) * 2);
*returnSize = 2;
for(; i < numsSize; i++){
for(j=i+1; j < numsSize; j++){
if(nums[i] + nums[j] == target ){
a[0] = i;
a[1] = j;
return a;
}
}
}
return 0;
}
想要在devc++等编译器上跑,还需加一个main函数,参考代码如下:(有一说一,这个twoSum函数在力扣上跑不了,但是在devc++和vs上都可以跑,迷。)
#include<stdio.h>
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int i=0,j=0;
for(; i < numsSize; i++){
for(j=i+1; j < numsSize; j++){
if(nums[i] + nums[j] == target ){
returnSize[0] = i;
returnSize[1] = j;
return returnSize;
}
}
}
return returnSize;
}
int main(){
int nums[6] = {2,7,11,-9,5,12};
int returnSize[2];
returnSize[2]=twoSum(nums, 6, 2, returnSize);
printf("%d,%d",returnSize[0],returnSize[1]);
return 0;
}