LeetCode刷题 1.两数之和

一、题目

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

二、第一次成功提交(C)

int* twoSum(int* nums, int numsSize, int target) 

{
    int *a = (int*)malloc(2*sizeof(int));
    for(int i=0;i

本此提交总结:

1.int a[2]之后return错误, 改为malloc申请地址,看来C的基本功还不扎实。

2.此为穷举法,双层循环时间复杂度较高。

三、学习哈希大法后提交代码(C++)

class Solution {
public:
    vector twoSum(vector& nums, int target) 
    {
        vector result;
        map tmp;
        for(int i=0;i

本次提交总结:

1.可以代替以前的创建一个超级大的数组a,在有这个数的对应的索引值的a的数组中置1。强烈推荐以后代替成这种方法。

四、一次循环哈希大法进阶(C++)

class Solution {
public:
    vector twoSum(vector& nums, int target) 
    {
        vector result;
        map tmp;
        for(int i=0;i

本此提交总结:

由于tmp[nums[i]]=i;的位置在刚进for循环那里,导致一直不通过,放到了for循环的最后通过了,说明在逻辑阶段还是有问题的,需要以后注意。

具体出错逻辑:

先判断map中是否有符合的值,再进行map的添加。而不是先添加值,再进行判断。例如[3,3],6的输入,若先添加值,则在位置1的3添加后覆盖了前面的3的索引,导致0输出出错,以后注意,逻辑一定要清楚。

你可能感兴趣的:(LeetCode刷题)