Leetcode 刷题Day1(1/2)
两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
①暴力解法(太久没敲代码了。。差点忘记vector咋用了,屑啊)
两层for循环套 低内存高时间复杂度
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int length=nums.size();
int i,j;
for(int i=1;i<=length;i++){
for(int j=0;j<i;j++){
if(nums.at(i)+nums.at(j)==target){
vector<int> v;
v.push_back(j);
v.push_back(i);
return v;
}
}
}
vector<int> v={j,i};
return ;
}
};

②哈希表
哈希表键值对
Object put(Object key, Object value)
将指定 key 映射到此哈希表中的指定 value。
Object get(Object key)
返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。
Object remove(Object key)
从哈希表中移除该键及其相应的值。
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;//如果哈希表中没有想要的数字,则把该数字加入哈希表中,留给后面i对应的数字查找。
}
return {};
}
};
//E.g.
//nums[3,2,4] target=6
//hashtable中 <int,int>对应<第i个数字的值,i>
//i=0 hashtable中没有3,将3插入哈希表 hashtable[3]=0 hashtable={<3,0>}
//i=1 hashtable中没有2,将2插入哈希表 hashtable[2]=1 hashtable={<3,0>,<2,1>}
//i=2 hashtable中有2,2+4=6,则返回键2对应的value值1,最后返回[1,2]
