1.1 暴力求解
第一次做leetcode题,还没有熟悉输入方法,想了很久如何输入。
解答:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i=0;i<nums.size();i++){
for(int j=i+1;j<nums.size();j++)
if(nums[i]+nums[j]==target)
return{i,j};
} return {};
}
};
知识点:
1、函数声明返回一个 vector<int>
类型,要在所有路径上都返回一个值(即使题目保证一定有解,否则编译不通过)。
1.2 使用两次哈希表
学习的是题解中的方法,代码如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> my_map;
for(int i=0;i<nums.size();i++){
my_map.insert(map<int,int>::value_type(nums[i],i));
}
for(int i=0;i<nums.size();i++){
if(my_map.count(target-nums[i])!=0&&my_map[target-nums[i]]!=i)
return {i,my_map[target-nums[i]]};
}return {};
}
};
可以通过,但是有很多疑问,比如输入是[3,1,3],target=6时:
1、此方法让数字作为key、下标作为value,但是key按理来说不应该是独一无二的吗?
2、在插入的时候为什么可以允许3--0、3--2这样的键值对存在?那么my_map[target-nums[i]应该等于多少呢,是0还是2?