leetcode刷题
两数之和
暴力法
从第一个元素开始向后查找,两数相加若等于target,则返回两者下标,否则继续向后查找。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i,j;
for(i=0;i<nums.size();++i){
for(j=i+1;j<nums.size();++j){
if(nums[i]+nums[j]==target){
return {i,j};
}
}
}
return {i,j};
}
};
哈希函数法
创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。
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]);
if(it!=hashtable.end()){
return{it->second,i};
}
hashtable[nums[i]]=i;
}
return{};
}
};
(太久没有写过代码很多细节都忘记了,把一些常用的函数&容易犯错的点记录在这里。)
1.vector——动态数组。
2.数组长度使用size()函数(c++),length(java)。
3.c++不能return数组,但可以返回指针。
return{}中{}代表代表一个空的vector<vector>,size为0。
4.哈希表
创建表 unordered_map<key,value> Map_name;
插入元素 ①a[key]=value;
② Map_name.insert(pair<int,int>(key,value));
③ unordered_map<int,int>Map_name{{key1,value1},{key2,value2}};
查找键值 table_name.find(key)
参数:它以键作为参数。
返回值:如果给定的键存在于unordered_map中,则它向该元素返回一个迭代器,否则返回映射迭代器的末尾。
5.C++11 auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型
本文介绍了LeetCode上经典题目“两数之和”的两种解决方案:暴力法和哈希函数法。暴力法通过双重循环查找两个数的组合;哈希函数法则利用哈希表快速查找配对元素,提高效率。
188

被折叠的 条评论
为什么被折叠?



