@@ -18,7 +18,7 @@ class Solution {
18
18
{3 , 1 , 0 }, {4 , -1 , 0 }};
19
19
int f = 0 , dh = 1 ;
20
20
vector<pair<int , int >> closer = {b}, detour;
21
- unordered_set< int > lookup;
21
+ vector<vector< bool >> lookup ( size (grid), vector< bool >( size (grid[ 0 ]))) ;
22
22
while (!closer.empty () || !detour.empty ()) {
23
23
if (closer.empty ()) {
24
24
f += dh;
@@ -28,15 +28,15 @@ class Solution {
28
28
if (b == t) {
29
29
return f;
30
30
}
31
- if (lookup. count ( b.first * grid[ 0 ]. size () + b.second ) ) {
31
+ if (lookup[ b.first ][ b.second ] ) {
32
32
continue ;
33
33
}
34
- lookup. emplace ( b.first * grid[ 0 ]. size () + b.second ) ;
34
+ lookup[ b.first ][ b.second ] = true ;
35
35
for (const auto & [nd, dr, dc] : directions) {
36
36
const pair<int , int >& nb = {b.first + dr, b.second + dc};
37
37
if (!(0 <= nb.first && nb.first < grid.size () &&
38
38
0 <= nb.second && nb.second < grid[0 ].size () &&
39
- !lookup. count ( nb.first * grid[ 0 ]. size () + nb.second ) )) {
39
+ !lookup[ nb.first ][ nb.second ] )) {
40
40
continue ;
41
41
}
42
42
if (nd == grid[b.first ][b.second ]) {
@@ -60,22 +60,22 @@ class Solution2 {
60
60
{3 , 1 , 0 }, {4 , -1 , 0 }};
61
61
const pair<int , int > b = {0 , 0 }, t = {grid.size () - 1 , grid[0 ].size () - 1 };
62
62
deque<pair<pair<int , int >, int >> dq = {{b, 0 }};
63
- unordered_set< int > lookup;
63
+ vector<vector< bool >> lookup ( size (grid), vector< bool >( size (grid[ 0 ]))) ;
64
64
while (!dq.empty ()) {
65
65
const auto [b, d] = dq.front (); dq.pop_front ();
66
66
if (b == t) {
67
67
return d;
68
68
}
69
- if (lookup. count ( b.first * grid[ 0 ]. size () + b.second ) ) {
69
+ if (lookup[ b.first ][ b.second ] ) {
70
70
continue ;
71
71
}
72
- lookup. emplace ( b.first * grid[ 0 ]. size () + b.second ) ;
72
+ lookup[ b.first ][ b.second ] = true ;
73
73
for (const auto & [nd, dr, dc] : directions) {
74
74
const auto & nb = make_pair (b.first + dr, b.second + dc);
75
75
const auto & cost = nd != grid[b.first ][b.second ] ? 1 : 0 ;
76
76
if (!(0 <= nb.first && nb.first < grid.size () &&
77
77
0 <= nb.second && nb.second < grid[0 ].size () &&
78
- !lookup. count ( nb.first * grid[ 0 ]. size () + nb.second ) )) {
78
+ !lookup[ nb.first ][ nb.second ] )) {
79
79
continue ;
80
80
}
81
81
if (!cost) {
0 commit comments