NC61.两数之和

两数之和

https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f?tpId=196&tqId=37090&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Ftab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=&title=

NC61.两数之和

class Solution {
public:
    /**
     * 
     * @param numbers int整型vector 
     * @param target int整型 
     * @return int整型vector
     */
    vector<int> twoSum(vector<int>& numbers, int target) {
        // write code here
        std::vector<int> ans;
        std::unordered_map<int, int> map;
        std::unordered_map<int, int>::iterator itor;
        int sz = numbers.size();
        for (int i = 0; i < sz; ++i) {
            itor = map.find(numbers[i]);
            if (itor != map.end()) {
                ans.emplace_back(itor->second + 1);
                ans.emplace_back(i + 1);
                break;
            }
            map.insert(std::pair<int, int>(target - numbers[i], i));
        }
        
        return ans;
    }
};

解题思路:

难点1:能否想到用Hash表来做映射,能想到这道题基本就能做出来;

难点2:Hash表里存什么很重要。完全将数组丢进Hash表,将Hash表当做数组的一个快速检索索引也能做;更优的办法是,边遍历数组,边将差丢入Hash表,这样Hash表就是个结果集,更加快速;

知识点:

知识点1:unordered_map与map的区别,前者是Hash表,时间复杂度近似常数,后者实现原理是红黑树,时间复杂度是lgN;

知识点2:map迭代器的声明:

std::unordered_map<int, int>::iterator itor; 

知识点3:map中寻找某个key是否存在,使用以下方法

itor = map.find(number);
if (itor != map.end()) {
	//...
}

知识点4:map的KV插入,使用以下方法最为高效

map.insert(std::pair<int, int>(i, j));

知识点5:map通过迭代器取值

int i = itor->first;
int j = itor->second;
全部评论
原题没了,能发一下吗,谢谢
点赞 回复 分享
发布于 2024-07-19 17:43 江西

相关推荐

05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务