【发布时间】:2018-11-24 01:26:08
【问题描述】:
我正在处理 leetcode Frog Jump 问题,当我在以下测试用例中使用 unordered_set 而不是 set 时,我发现了一些连线结果。 unordered_set 和 set 的大小都是 4,但看起来 unordered_set 并没有遍历所有元素。
[0,1,2,3,4,5,6,7,8,9,10,11]
输出 :
设置大小 4
1
2
3
4
无序集大小:4
1
挣扎了几个小时,却找不到任何原因。任何提示都会非常受欢迎。
bool canCross(vector<int>& stones) {
unordered_map<int, set<int>> dp;
unordered_map<int, unordered_set<int>> dp1;
unordered_set<int> s(stones.begin(), stones.end());
dp[0].insert(0);
dp1[0].insert(0);
for (int i = 0; i < stones.size(); ++i) {
if (i == 10) cout << "set size " << dp[stones[i]].size() << endl;
for (auto a: dp[stones[i]]) {
if (i == 10) cout << a << "\t" << endl;
int b = stones[i];
if (s.count(b + a - 1)) {
dp[b + a - 1].insert(a - 1);
}
if (s.count(b + a)) {
dp[b + a].insert(a);
}
if (s.count(b + a + 1)) {
dp[b + a + 1].insert(a + 1);
}
}
if (i == 10) cout << "unordered set size: " << dp1[stones[i]].size() << endl;
for (auto a: dp1[stones[i]]) {
if (i == 10) cout << a << "\t" << endl;
int b = stones[i];
if (s.count(b + a - 1)) {
dp1[b + a - 1].insert(a - 1);
}
if (s.count(b + a)) {
dp1[b + a].insert(a);
}
if (s.count(b + a + 1)) {
dp1[b + a + 1].insert(a + 1);
}
}
}
return !dp[stones.back()].empty();
}
【问题讨论】: