Skip to content

Commit a1585c4

Browse files
committed
feat: add solutions to lc problem: No.1162
No.1162.As Far from Land as Possible
1 parent 2a06d42 commit a1585c4

File tree

30 files changed

+1965
-5
lines changed

30 files changed

+1965
-5
lines changed

solution/1100-1199/1162.As Far from Land as Possible/README.md

Lines changed: 130 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,22 +47,151 @@
4747

4848
<!-- 这里可写通用的实现逻辑 -->
4949

50+
BFS。
51+
5052
<!-- tabs:start -->
5153

5254
### **Python3**
5355

5456
<!-- 这里可写当前语言的特殊实现逻辑 -->
5557

5658
```python
57-
59+
class Solution:
60+
def maxDistance(self, grid: List[List[int]]) -> int:
61+
n = len(grid)
62+
q = deque([(i, j) for i in range(n)
63+
for j in range(n) if grid[i][j] == 1])
64+
ans = -1
65+
valid = False
66+
while q:
67+
ans += 1
68+
for _ in range(len(q), 0, -1):
69+
i, j = q.popleft()
70+
for a, b in [[0, 1], [0, -1], [1, 0], [-1, 0]]:
71+
x, y = i + a, b + j
72+
if 0 <= x < n and 0 <= y < n and grid[x][y] == 0:
73+
valid = True
74+
grid[x][y] = 1
75+
q.append((x, y))
76+
return ans if valid else -1
5877
```
5978

6079
### **Java**
6180

6281
<!-- 这里可写当前语言的特殊实现逻辑 -->
6382

6483
```java
84+
class Solution {
85+
public int maxDistance(int[][] grid) {
86+
int n = grid.length;
87+
Deque<int[]> q = new LinkedList<>();
88+
for (int i = 0; i < n; ++i) {
89+
for (int j = 0; j < n; ++j) {
90+
if (grid[i][j] == 1) {
91+
q.offer(new int[]{i, j});
92+
}
93+
}
94+
}
95+
int ans = -1;
96+
boolean valid = false;
97+
int[] dirs = {-1, 0, 1, 0, -1};
98+
while (!q.isEmpty()) {
99+
++ans;
100+
for (int k = q.size(); k > 0; --k) {
101+
int[] p = q.poll();
102+
for (int i = 0; i < 4; ++i) {
103+
int x = p[0] + dirs[i];
104+
int y = p[1] + dirs[i + 1];
105+
if (x >= 0 && x < n && y >= 0 && y < n && grid[x][y] == 0) {
106+
valid = true;
107+
grid[x][y] = 1;
108+
q.offer(new int[]{x, y});
109+
}
110+
}
111+
}
112+
}
113+
return valid ? ans : -1;
114+
}
115+
}
116+
```
117+
118+
### **C++**
119+
120+
```cpp
121+
class Solution {
122+
public:
123+
int maxDistance(vector<vector<int>>& grid) {
124+
int n = grid.size();
125+
typedef pair<int, int> pii;
126+
queue<pii> q;
127+
for (int i = 0; i < n; ++i)
128+
for (int j = 0; j < n; ++j)
129+
if (grid[i][j] == 1)
130+
q.push({i, j});
131+
int ans = -1;
132+
bool valid = false;
133+
vector<int> dirs = {-1, 0, 1, 0, -1};
134+
while (!q.empty())
135+
{
136+
++ans;
137+
for (int k = q.size(); k > 0; --k)
138+
{
139+
pii p = q.front();
140+
q.pop();
141+
for (int i = 0; i < 4; ++i)
142+
{
143+
int x = p.first + dirs[i];
144+
int y = p.second + dirs[i + 1];
145+
if (x >= 0 && x < n && y >= 0 && y < n && grid[x][y] == 0)
146+
{
147+
valid = true;
148+
grid[x][y] = 1;
149+
q.push({x, y});
150+
}
151+
}
152+
}
153+
}
154+
return valid ? ans : -1;
155+
}
156+
};
157+
```
65158
159+
### **Go**
160+
161+
```go
162+
func maxDistance(grid [][]int) int {
163+
n := len(grid)
164+
var q [][]int
165+
for i := 0; i < n; i++ {
166+
for j := 0; j < n; j++ {
167+
if grid[i][j] == 1 {
168+
q = append(q, []int{i, j})
169+
}
170+
}
171+
}
172+
ans := -1
173+
valid := false
174+
dirs := []int{-1, 0, 1, 0, -1}
175+
for len(q) > 0 {
176+
ans++
177+
for k := len(q); k > 0; k-- {
178+
p := q[0]
179+
q = q[1:]
180+
for i := 0; i < 4; i++ {
181+
x, y := p[0]+dirs[i], p[1]+dirs[i+1]
182+
if x >= 0 && x < n && y >= 0 && y < n && grid[x][y] == 0 {
183+
valid = true
184+
grid[x][y] = 1
185+
q = append(q, []int{x, y})
186+
}
187+
}
188+
}
189+
}
190+
if valid {
191+
return ans
192+
}
193+
return -1
194+
}
66195
```
67196

68197
### **...**

solution/1100-1199/1162.As Far from Land as Possible/README_EN.md

Lines changed: 130 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,147 @@
3737

3838
## Solutions
3939

40+
BFS.
41+
4042
<!-- tabs:start -->
4143

4244
### **Python3**
4345

4446
```python
45-
47+
class Solution:
48+
def maxDistance(self, grid: List[List[int]]) -> int:
49+
n = len(grid)
50+
q = deque([(i, j) for i in range(n)
51+
for j in range(n) if grid[i][j] == 1])
52+
ans = -1
53+
valid = False
54+
while q:
55+
ans += 1
56+
for _ in range(len(q), 0, -1):
57+
i, j = q.popleft()
58+
for a, b in [[0, 1], [0, -1], [1, 0], [-1, 0]]:
59+
x, y = i + a, b + j
60+
if 0 <= x < n and 0 <= y < n and grid[x][y] == 0:
61+
valid = True
62+
grid[x][y] = 1
63+
q.append((x, y))
64+
return ans if valid else -1
4665
```
4766

4867
### **Java**
4968

5069
```java
70+
class Solution {
71+
public int maxDistance(int[][] grid) {
72+
int n = grid.length;
73+
Deque<int[]> q = new LinkedList<>();
74+
for (int i = 0; i < n; ++i) {
75+
for (int j = 0; j < n; ++j) {
76+
if (grid[i][j] == 1) {
77+
q.offer(new int[]{i, j});
78+
}
79+
}
80+
}
81+
int ans = -1;
82+
boolean valid = false;
83+
int[] dirs = {-1, 0, 1, 0, -1};
84+
while (!q.isEmpty()) {
85+
++ans;
86+
for (int k = q.size(); k > 0; --k) {
87+
int[] p = q.poll();
88+
for (int i = 0; i < 4; ++i) {
89+
int x = p[0] + dirs[i];
90+
int y = p[1] + dirs[i + 1];
91+
if (x >= 0 && x < n && y >= 0 && y < n && grid[x][y] == 0) {
92+
valid = true;
93+
grid[x][y] = 1;
94+
q.offer(new int[]{x, y});
95+
}
96+
}
97+
}
98+
}
99+
return valid ? ans : -1;
100+
}
101+
}
102+
```
103+
104+
### **C++**
105+
106+
```cpp
107+
class Solution {
108+
public:
109+
int maxDistance(vector<vector<int>>& grid) {
110+
int n = grid.size();
111+
typedef pair<int, int> pii;
112+
queue<pii> q;
113+
for (int i = 0; i < n; ++i)
114+
for (int j = 0; j < n; ++j)
115+
if (grid[i][j] == 1)
116+
q.push({i, j});
117+
int ans = -1;
118+
bool valid = false;
119+
vector<int> dirs = {-1, 0, 1, 0, -1};
120+
while (!q.empty())
121+
{
122+
++ans;
123+
for (int k = q.size(); k > 0; --k)
124+
{
125+
pii p = q.front();
126+
q.pop();
127+
for (int i = 0; i < 4; ++i)
128+
{
129+
int x = p.first + dirs[i];
130+
int y = p.second + dirs[i + 1];
131+
if (x >= 0 && x < n && y >= 0 && y < n && grid[x][y] == 0)
132+
{
133+
valid = true;
134+
grid[x][y] = 1;
135+
q.push({x, y});
136+
}
137+
}
138+
}
139+
}
140+
return valid ? ans : -1;
141+
}
142+
};
143+
```
51144
145+
### **Go**
146+
147+
```go
148+
func maxDistance(grid [][]int) int {
149+
n := len(grid)
150+
var q [][]int
151+
for i := 0; i < n; i++ {
152+
for j := 0; j < n; j++ {
153+
if grid[i][j] == 1 {
154+
q = append(q, []int{i, j})
155+
}
156+
}
157+
}
158+
ans := -1
159+
valid := false
160+
dirs := []int{-1, 0, 1, 0, -1}
161+
for len(q) > 0 {
162+
ans++
163+
for k := len(q); k > 0; k-- {
164+
p := q[0]
165+
q = q[1:]
166+
for i := 0; i < 4; i++ {
167+
x, y := p[0]+dirs[i], p[1]+dirs[i+1]
168+
if x >= 0 && x < n && y >= 0 && y < n && grid[x][y] == 0 {
169+
valid = true
170+
grid[x][y] = 1
171+
q = append(q, []int{x, y})
172+
}
173+
}
174+
}
175+
}
176+
if valid {
177+
return ans
178+
}
179+
return -1
180+
}
52181
```
53182

54183
### **...**
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Solution {
2+
public:
3+
int maxDistance(vector<vector<int>>& grid) {
4+
int n = grid.size();
5+
typedef pair<int, int> pii;
6+
queue<pii> q;
7+
for (int i = 0; i < n; ++i)
8+
for (int j = 0; j < n; ++j)
9+
if (grid[i][j] == 1)
10+
q.push({i, j});
11+
int ans = -1;
12+
bool valid = false;
13+
vector<int> dirs = {-1, 0, 1, 0, -1};
14+
while (!q.empty())
15+
{
16+
++ans;
17+
for (int k = q.size(); k > 0; --k)
18+
{
19+
pii p = q.front();
20+
q.pop();
21+
for (int i = 0; i < 4; ++i)
22+
{
23+
int x = p.first + dirs[i];
24+
int y = p.second + dirs[i + 1];
25+
if (x >= 0 && x < n && y >= 0 && y < n && grid[x][y] == 0)
26+
{
27+
valid = true;
28+
grid[x][y] = 1;
29+
q.push({x, y});
30+
}
31+
}
32+
}
33+
}
34+
return valid ? ans : -1;
35+
}
36+
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
func maxDistance(grid [][]int) int {
2+
n := len(grid)
3+
var q [][]int
4+
for i := 0; i < n; i++ {
5+
for j := 0; j < n; j++ {
6+
if grid[i][j] == 1 {
7+
q = append(q, []int{i, j})
8+
}
9+
}
10+
}
11+
ans := -1
12+
valid := false
13+
dirs := []int{-1, 0, 1, 0, -1}
14+
for len(q) > 0 {
15+
ans++
16+
for k := len(q); k > 0; k-- {
17+
p := q[0]
18+
q = q[1:]
19+
for i := 0; i < 4; i++ {
20+
x, y := p[0]+dirs[i], p[1]+dirs[i+1]
21+
if x >= 0 && x < n && y >= 0 && y < n && grid[x][y] == 0 {
22+
valid = true
23+
grid[x][y] = 1
24+
q = append(q, []int{x, y})
25+
}
26+
}
27+
}
28+
}
29+
if valid {
30+
return ans
31+
}
32+
return -1
33+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy