Skip to content

Commit a1585c4

Browse files
committedFeb 6, 2022
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
 

Diff for: ‎solution/1100-1199/1162.As Far from Land as Possible/README.md

+130-1
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
### **...**

Diff for: ‎solution/1100-1199/1162.As Far from Land as Possible/README_EN.md

+130-1
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
### **...**
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+
};
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)
Please sign in to comment.