本来可以面试成功就差HR面试了,现在给我说恒英也要机试题了。我现在肝机试题吧!大环境就是这,记录两周一个机试学习过程
V1:自己写的暴力法
V2:暴力法2:通过python的**str in list**方式逐个遍历,虽然代码看似简单,但每一次in操作的复杂度一样是O(n),所以总体复杂度O(n*n) 懒得去看了,都是暴力算法,没有研究的价值。
V3:hashmap
ref:1. 两数之和 - 力扣(Leetcode)
(23条消息) C++中的unordered_map用法详解_zou_albert的博客-CSDN博客
C++STL : unordered_map详解 - 知乎 (zhihu.com)
这个是人家的写的代码。我来理解学习下。
代码第一行:这是个啥?这块是定义一个nordered_map的容器
unordered_map<int,int> heap;
代码第二行:for循环
for ( int i = 0 ; i < nums.size() ; i ++ ) {
代码第三行:题目要求,
int r = target - nums[i] ;
代码第四行:这是啥?怎么画风突变?
if(heap.count(r)) return {heap[r],i};
unordered_map.count(key)返回找到的个数,这块意思就是拿
举个测试例:拿着实例来帮助分析代码
nums[1,2,5,7] target=7
输出应该是[0,1]
找到key为nums[i]=2,i =1时,value为5的个数(为1),然后输出value 5对应索引值和key的索引值i
heap[r]取r对应的value,然后一起返回
代码第五行:
heap[nums[i]] = i;
这个是把key 和value关联起来
执行过程:
第一圈没找到,第二圈找到了
这块是无序的hash_map,并不会把5 2再输出一遍。
代码第六行:
return {};
return {};表示"返回使用空list-initializer初始化的函数返回类型的对象".确切的行为取决于返回的对象的类型
总结:重点V3代码中第四行和第五行