【笔记】LeetCode之路 #1 两数之和
目录
前言
真的代码能力太弱了,得打打题磨练一下,就从力扣开始刷刷看吧!
当笔记随心记一记。
正文
题目描述
1. 两数之和
给定一个整数数组
nums和一个整数目标值target,请你在该数组中找出 和为目标值target的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
解法(解法来自力扣题解库)
普通解法就是使用两层遍历嵌套,时间复杂度为 O(N^2);
使用哈希表以空间换时间可以缩短时间,时间复杂度为 O(N)。
也就是说,在遍历的同时,记下已经遍历过的数组元素的下标,并存在表中;后面遍历到的数值与前面表中记录的键值对匹配。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hashTable;
for(int i = 0; i < nums.size(); ++i){
auto it = hashTable.find(target - nums[i]); //如果没有找到,会返回 end
if(it != hashTable.end()){
return {it->second, i};
}
hashTable[nums[i]] = i; //将遍历过的数值元素的下标存储起来
}
return{};
}
};
后记
共勉!
第一题就卡了,原因各种编译不通过,自己的 C++ 语法还是有很大的问题。没事,继续加油!
浙公网安备 33010602011771号