栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【Leetcode哈希+no双指针】1. 两数之和(有关于数组set还是map的选择,为什么不能用双指针!!)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Leetcode哈希+no双指针】1. 两数之和(有关于数组set还是map的选择,为什么不能用双指针!!)

文章目录
  • Leetcode1
    • 1.问题描述
    • 2.解决方案
      • 解法一:暴力
      • 解法二:哈希
    • 3.关于数组set还是map的选择
    • 4.为什么不能用双指针

Leetcode1 1.问题描述


2.解决方案 解法一:暴力

暴力遍历,时间复杂度o(n2)

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


解法二:哈希

1.利用哈希容器 map 降低时间复杂度,遍历数组 nums,i 为当前下标
2.每个值都判断map中是否存在 target-nums[i] 的 key 值
3.如果存在则找到了两个值,如果不存在则将当前的 (nums[i],i) 存入 map 中,继续遍历直到找到为止

//正确hash
class Solution1 {
public:
    vector twoSum(vector& nums, int target) {
        vector ans;
        unordered_map mp;
        for(int i=0;i::iterator it=mp.find(key);
            if(it!=mp.end()) {
                ans.push_back(it->second);
                ans.push_back(i);
                return ans;
            }
            mp[nums[i]]=i;
        }
        return ans;
    }
};



3.关于数组set还是map的选择

这道题目中并不需要key有序,选择std::unordered_map 效率更高!



4.为什么不能用双指针

两数之和不可以用双指针,只能用哈希,而三数之和哈希双指针都可以

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302980.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号