题目描述
若存在一个整数数组 nums 和一个整数目标值 target,需要在该数组中找出和为目标值 target 的两个整数,并返回其数组下标
注意!!!
数组中同一个元素在答案里不能重复出现,也就是说,如果 ,目标值 ,答案返回的索引值不能单纯的为 ,应该为
C 语言具体代码实现
先谈一种暴力破解法!!!—— 时间复杂度:
也就是让数组 nums 中的任意二项都进行匹配相加,若和刚好为目标值 target,那么返回其对应的索引值
具体方法是枚举数组中的每一个数 ,寻找数组中是否存在
#include <stdio.h>
#include <stdlib.h>
int *twoSum(int *nums, int numsSize, int target, int *returnSize){
for(int i = 0; i < numsSize; i++){
for(int j = i + 1; j < numsSize; j++){
if(nums[i] + nums[j] == target){
int *ret = (int*)malloc(2*sizeof(int));
ret[0] = i, ret[1] = j;
*returnSize = 2;
return ret;
}
}
}
*returnSize = 0;
return NULL;
}
int main(void){
int my_nums[] = {1, 2, 5, 9, 12}; // 整数数组
int tar = 21; // 目标值
int nums_size = sizeof(my_nums)/sizeof(my_nums[0]); // 整数数组长度
int return_array_size; // 调用函数后返回的数组长度
// int *return_array 为函数返回值,是一个堆区整型数组
int *return_array = twoSum(my_nums, nums_size, tar, &return_array_size);
// 格式化打印(满足列表格式)
printf("[");
for(int i = 0; i < return_array_size; i++){
if(i != return_array_size-1){
printf("%d,", return_array[i]);
}else{
printf("%d", return_array[i]);
}
}
printf("]");
// [3,4]
return 0;
}
再谈另一种方法:哈希表!!!
但是由于作者还未学习过哈希表,所以先写到这里