leetcode Two Sum 学习笔记
题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0,1]
求解
解法一:暴力法
两个for循环遍历数组,时间复杂度为 O (n^2)
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int *twoSum(int* nums, int numsSize, int target, int *returnSize){
int *a = (int *)malloc(sizeof(int)*2);
for (int i = 0; i < numsSize-1; i++) {
for (int j = i+1; j < numsSize; j++) {
if (nums[i]+nums[j] == target) {
a[0] = i;
a[1] = j;
*returnSize = 2;
return a;
}
}
}
*returnSize = 0;
return NULL;
}
解法二:HashMap法
遍历数组一轮,将遍历的数存入哈希表,目标值减去该数就是我们所要求的第二个数,如果这第二个数已经在哈希表中,说明搜索完成,返回结果[hashmap[another_num], index]。时间复杂度为 O (n)
//
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashmap = {}
for index, num in enumerate(nums):
another_num = target - num
if another_num in hashmap:
return [hashmap[another_num], index]
hashmap[num] = index
return None