1.两数之和
- 方法一:直接暴力求解和暴力找差值(力扣数据已经增加,目前已经不能通过)
- 方法二:哈希map(现在用此方法也只能打败50%左右的人)
//直接暴力求解容易想到,但是查找差值会更快一些。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
for (int i = 0; i < n; ++i) {
/*求和然后和target比较,内层循环每次都要计算,时间浪费
for (int j = i + 1; j < n; ++j) {
if (nums[i] + nums[j] == target) {
return {i, j};
}
}*/
int test = target-nums[i];
for (int j = i + 1; j < n; ++j) {
if (nums[j] == test) {
return {i, j};
}
}
}
return {};
}
};
//哈希map方法,通过哈希map交换value和index,查找快速且易得到返回值
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> map;
for(int i = 0; i < nums.size(); i++)
{
auto iter = map.find(target - nums[i]);//返回迭代器
if(iter != map.end())
{
return {i, iter->second};
}
map[nums[i]] = i;//value->index
}
return {};
}
};
#python版本
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dict1 = dict();
for i in range(0, len(nums)):
if(dict1.__contains__(target - nums[i])):
return [i, dict1[target - nums[i]]]
dict1[nums[i]] = i
return []
如果对你有帮助,请点个赞哦!!!