题目:给一个数组和一个目标值,要求在数组中寻找两个数等于目标值,输出这两个数的索引值。同一个元素不能用两次。
C++:
解法一:暴力(时间复杂度n的平方)
两层循环,没啥说的。60ms
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] == target - nums[j])
{
return {i, j};
}
}
}
}
解法二:采用哈希表map(时间复杂度O(n))
采用哈希表寻找值,用数组值做key,索引值做value。哈希表查值为O(1)。4ms
vector<int> twoSum(vector<int>& nums, int target) {
map<int, int> nmap;
for(int i = 0; i < nums.size(); i++)
{
int cha = target - nums[i];
if(nmap.find(cha) != nmap.end())
{
return vector<int> {nmap.find(cha)->second, i};
}
nmap.insert(pair<int, int>(nums[i], i));
}
}
python:
解法一:
list.index(str, [begin=0, end=len(list)]),返回索引值。1000+ms
def twoSum(self, nums, target):
for i in range(len(nums)):
if (target - nums[i]) in nums[i + 1:]:
return [i, nums.index(target - nums[i], i + 1, len(nums))]
解法二:采用字典
60ms
class Solution(object):
def twoSum(self, nums, target):
dic = {}
for i in range(len(nums)):
if nums[i] in dic:
return [dic[nums[i]], i]
else:
dic[target - nums[i]] = i
疑惑:如果采用map,事先将数组存到map中,相同的元素只会保留一个,就会出现[3, 3] 6 出现错误,暂时不会解决。
知识点:哈希表,C++的vector,map,python中的index