afatnan
Senior Member
C++:
class Solution {
public:
bool canCross(vector<int>& stones) {
int n = stones.size();
vector<unordered_set<int>> steps(n);
steps[0].insert(1);
unordered_map<int, int> m;
vector<int> minStep(n, 1);
for (int i = 0; i < n - 1; ++i) {
m[stones[i]] = i; // map stone to index
minStep[i] = stones[i + 1] - stones[i]; // min steps required at i
}
for (int i = 0; i < n - 1; ++i){
for (int k : steps[i]){
if (k + stones[i] == stones.back()) return true;
if (m.count(k + stones[i])){
int idx = m[k + stones[i]];
for (int j = max(k - 1, minStep[idx]); j <= k + 1; ++j)
steps[idx].insert(j);
}
}
}
return false;
}
};
.đc 2 câu, câu 3 sau contest 30p mới xong. Câu 4 chưa có ý tưởng gì



)
mà nó còn kêu xài 2 queues, vãi thật
