写在前面
Leetcode 社区挺神奇的,近几年火热程度不亚于开源社区github。做题一直以来是咱们亚洲人的强项,咋这香馍馍也被美国硅谷抢先了,着实香菇。
企于算法工程师的江湖地位和薪资福利,决定先等等再细读具体数学,时间有限,编程汗颜!
Leetcode开始撸,看看大量做题后,算法和编程是否能有飞跃。以下题解纯属个人输出,如有雷同,那就是英雄所见略同。
2021/12/26
1. 两数之和![1.Sum of two number](https://img-blog.csdnimg.cn/c0347b3679c249719b3807d933e489a5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU21va2UwOTAx,size_20,color_FFFFFF,t_70,g_se,x_16)
/*
* @lc app=leetcode.cn id=1 lang=cpp
*
* [1] 两数之和
*/
// @lc code=start
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
//the container of output
vector<int> ans;
//hash table stores values have already scanned
//key of the store is value,value of the store is index
//search for index by value
unordered_map<int,int> store;
int size=nums.size();
//one iteration can slove question
for(int i=0;i<size;++i){
int remainder= target-nums[i];
if(store.count(remainder)){
//exists
ans.push_back(store[remainder]);
ans.push_back(i);
break;
}else{
//non-exists
store[nums[i]]=i;
}
}
return ans;
}
};
关键信息:
数组中同一个元素不能在答案中出现两次
任意顺序返回答案
甚至
每次输入只对应一个答案
所有的信息指向哈希表,那么哈希表key-value该存储些什么呢
按逻辑,数组中每一对数都可能是一次输入的返回答案,那么对数组的处理一定是遍历。
返回答案是数组下标,条件是两个元素和等于target。很显然,哈希表的key可以是元素值,value则是关注的元素下标。
对于插入哈希表的数而言,程序期望的是知道与target的剩余数是否已经存在。可以看成每个数都要去哈希表里找伙伴,和伙伴一起去平分target这个派,发现没有在一块的伙伴,他就去哈希表里等着后面的伙伴去找他,因为遍历过程就是让后面找前面的。
时间复杂度:只利用了一次遍历,O(n)。
空间复杂度:哈希表需要存储遍历过的数,O(n)。
从今天起,浩浩荡荡的刷题大军里又多了一个”考生”。忽然又想起了《考死》,打算有空重刷下。