请问下leetcode的two sum题目# JobHunting - 待字闺中
s*b
1 楼
下面的程序如果用了注释部分,对于相等的key的处理就有错,如果不用注释部分,就
没错,不知道哪位大牛能解释下为什么啊?谢谢
Ex: 比如array = [2,1,9,4,4,56,90,3], target = 8,正确输出应该是4,5
如果定义hash table是用的是:table[numbers[i]] = i 那就能正确输出
如果定义用的是:table.insert(std::make_pair(numbers[i], i)); 那就
会输出4,4
对此十分不理解啊,不是同样的插入么?unordered_map是怎么处理key相等的状况的,
一般来说key不是unique的么?万分感谢啊!!!
class Solution {
public:
std::vector twoSum(std::vector &numbers, int target) {
std::vector result;
std::unordered_map table;
for(unsigned int i = 0; i < numbers.size(); i++) {
table[numbers[i]] = i;
// table.insert(std::make_pair(numbers[i], i));
}
for(unsigned int i = 0; i < numbers.size(); i++) {
if(table.find(target - numbers[i]) != table.end()) {
unsigned int j = table[target - numbers[i]];
if(i < j) {
result.push_back(i+1);
result.push_back(j+1);
}
else {
result.push_back(j+1);
result.push_back(i+1);
}
return result;
}
}
}
};
没错,不知道哪位大牛能解释下为什么啊?谢谢
Ex: 比如array = [2,1,9,4,4,56,90,3], target = 8,正确输出应该是4,5
如果定义hash table是用的是:table[numbers[i]] = i 那就能正确输出
如果定义用的是:table.insert(std::make_pair
会输出4,4
对此十分不理解啊,不是同样的插入么?unordered_map是怎么处理key相等的状况的,
一般来说key不是unique的么?万分感谢啊!!!
class Solution {
public:
std::vector
std::vector
std::unordered_map
for(unsigned int i = 0; i < numbers.size(); i++) {
table[numbers[i]] = i;
// table.insert(std::make_pair
}
for(unsigned int i = 0; i < numbers.size(); i++) {
if(table.find(target - numbers[i]) != table.end()) {
unsigned int j = table[target - numbers[i]];
if(i < j) {
result.push_back(i+1);
result.push_back(j+1);
}
else {
result.push_back(j+1);
result.push_back(i+1);
}
return result;
}
}
}
};