第一次使用LeetCode——初级练习第一题
题目如下:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
我是计算机小白,所以用的是C实现的,函数代码块如下。测试代码(加主函数)代码在文末。
/**
* 暴力法
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target,int *returnSize){
int i,j;
//动态构造一个数组,此数组用于存放那俩数的下标,因为就存两个,所以用sizeof(int)*2
int * b = (int *)malloc(sizeof(int)*2);
i = 0;
//初始化数组b
while(i<2){
b[i] = -1;
i++;
}
for(i = 0;i<numsSize-1;i++){
for(j = i+1;j<numsSize;j++){
if(nums[i]+nums[j] == target){
b[0] = i;
b[1] = j;
*returnSize = 2;
break;
}
}
}
if(b[0] == -1){
return NULL;
}
else
return b;
}
然后是我的测试代码及结果截图。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
int* twoSum(int* nums, int numsSize, int target, int *returnSize) {
int i, j;
int * b = (int *)malloc(sizeof(int) * 2);
i = 0;
while (i < 2) {
b[i] = -1;
i++;
}
for (i = 0; i < numsSize - 1; i++) {
for (j = i + 1; j < numsSize; j++) {
if (nums[i] + nums[j] == target) {
b[0] = i;
b[1] = j;
*returnSize = 2;
break;
}
}
}
if (b[0] == -1) {
return NULL;
}
else
return b;
}
int main()
{
int a[] = { 2,7,11,15 };
int * b = NULL;
int i;
int result;
printf("请输入目标值\n");
scanf_s("%d", &result);
b = twoSum(a, 4, result, b);
if (b != NULL) {
for (i = 0; i < 2; i++) {
printf("%d\n", b[i]);
}
}
else
{
printf("找不到两数之和为%d的两个数", result);
}
system("pause");
return 0;
}
结果如下图: