C++ leetcode刷题复盘1: two sum

代码参考:https://www.cnblogs.com/grandyang/p/4130379.html
相关学习基础知识参考:
1.C/C++ 定义向量、赋值和使用
2.unordered_map原理
3.unordered_map使用

解法1

使用暴力解法,相关有vector的定义与赋值。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;//变量定义域要注意,否则return报错
        for (int i = 0; i < nums.size(); i++)
        {
            for (int j = i+1; j < nums.size(); j++)
            {
                if (nums[i]+nums[j] == target) {
                    result.push_back(i);
                    result.push_back(j);
                    break;
                }
            }            
        }
        return result;
    }
};

比较慢。
在这里插入图片描述

解法二

用到了 unordered_map迭代器。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> mp;//迭代器定义
        vector<int> result;
        for (int i = 0; i < nums.size(); i++)
        {
            mp[nums[i]]=i;//构建nums与i的关系
        }
        for (int i = 0; i < nums.size(); i++)
        {
            int n = target-nums[i];
            if(mp.count(n) && mp[n]!=i ){//count返回寻找值的个数,find返回位置
                result.push_back(i);//向量赋值
                result.push_back(mp[n]);
                break;
            }
        }        
        return result;   
    }
};

快了很多
在这里插入图片描述

解法三


class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> mp;
        vector<int> result;
        for (int i = 0; i < nums.size(); ++i)
        {
            int n = target-nums[i];
            if(mp.count(target-nums[i])){
                return{i,mp[target-nums[i]]};
            }
            mp[nums[i]]=i;
        }        
        return {};   
    }
};

减少了未知数的设置,以及循环的次数,更快了。但事实上并不清楚mp[nums[i]]是怎么做到在未定义之前就使用的。
在这里插入图片描述

可能需要注意的点

第一次写leetcode发现好多基础不行,只能边写边学。以下问题需要在日后训练中搞清楚。
1)i++与++i的区别
2)for循环的具体原理及++对于for循环的影响
3)向量的定义和使用
4)hash_map与unordered_map区别
5)数据结构知识需要补
6)逻辑算符&&运算规则及优先级
7)class与public的理解
……
anyway,希望之后每天至少完成一道题。

猜你喜欢

转载自blog.csdn.net/Amberfd/article/details/112313035