Skip to content

Commit ac84e8d

Browse files
authored
Merge pull request #771 from fartem/417_Pacific_Atlantic_Water_Flow
2024-11-12 v. 7.0.1: added "417. Pacific Atlantic Water Flow"
2 parents 3df191b + 291a2e1 commit ac84e8d

File tree

4 files changed

+92
-1
lines changed

4 files changed

+92
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,3 +566,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
566566
| 398. Random Pick Index | [Link](https://leetcode.com/problems/random-pick-index/) | [Link](./lib/medium/398_random_pick_index.rb) | [Link](./test/medium/test_398_random_pick_index.rb) |
567567
| 400. Nth Digit | [Link](https://leetcode.com/problems/nth-digit/) | [Link](./lib/medium/400_nth_digit.rb) | [Link](./test/medium/test_400_nth_digit.rb) |
568568
| 402. Remove K Digits | [Link](https://leetcode.com/problems/remove-k-digits/) | [Link](./lib/medium/402_remove_k_digits.rb) | [Link](./test/medium/test_402_remove_k_digits.rb) |
569+
| 417. Pacific Atlantic Water Flow | [Link](https://leetcode.com/problems/pacific-atlantic-water-flow/) | [Link](./lib/medium/417_pacific_atlantic_water_flow.rb) | [Link](./test/medium/test_417_pacific_atlantic_water_flow.rb) |

leetcode-ruby.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'English'
55
::Gem::Specification.new do |s|
66
s.required_ruby_version = '>= 3.0'
77
s.name = 'leetcode-ruby'
8-
s.version = '7.0.0'
8+
s.version = '7.0.1'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/pacific-atlantic-water-flow/
4+
# @param {Integer[][]} heights
5+
# @return {Integer[][]}
6+
def pacific_atlantic(heights)
7+
r = heights.size
8+
c = heights.first.size
9+
10+
atlantic = ::Array.new(r) { ::Array.new(c) }
11+
pacific = ::Array.new(r) { ::Array.new(c) }
12+
13+
(0...r).each do |i|
14+
(0...c).each do |j|
15+
dfs417(pacific, heights, i, j, 0) if i.zero? || j.zero?
16+
17+
dfs417(atlantic, heights, i, j, 0) if i == r - 1 || j == c - 1
18+
end
19+
end
20+
21+
result = []
22+
(0...r).each do |i|
23+
(0...c).each do |j|
24+
result << [i, j] if atlantic[i][j] && pacific[i][j]
25+
end
26+
end
27+
28+
result
29+
end
30+
31+
private
32+
33+
# @param {Boolean[][]} sea
34+
# @param {Integer[][]} grid
35+
# @param {Integer} r
36+
# @param {Integer} c
37+
# @param {Integer} prev
38+
def dfs417(sea, grid, r, c, prev)
39+
return if r.negative? || r >= grid.size || c.negative? || c >= grid.first.size
40+
41+
return if grid[r][c] < prev
42+
43+
return if sea[r][c]
44+
45+
sea[r][c] = true
46+
47+
dfs417(sea, grid, r + 1, c, grid[r][c])
48+
dfs417(sea, grid, r - 1, c, grid[r][c])
49+
dfs417(sea, grid, r, c + 1, grid[r][c])
50+
dfs417(sea, grid, r, c - 1, grid[r][c])
51+
end
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/417_pacific_atlantic_water_flow'
5+
require 'minitest/autorun'
6+
7+
class PacificAtlanticWaterFlowTest < ::Minitest::Test
8+
def test_default_one
9+
assert_equal(
10+
[
11+
[0, 4],
12+
[1, 3],
13+
[1, 4],
14+
[2, 2],
15+
[3, 0],
16+
[3, 1],
17+
[4, 0]
18+
],
19+
pacific_atlantic(
20+
[
21+
[1, 2, 2, 3, 5],
22+
[3, 2, 3, 4, 4],
23+
[2, 4, 5, 3, 1],
24+
[6, 7, 1, 4, 5],
25+
[5, 1, 1, 2, 4]
26+
]
27+
)
28+
)
29+
end
30+
31+
def test_default_two
32+
assert_equal(
33+
[[0, 0]],
34+
pacific_atlantic(
35+
[[1]]
36+
)
37+
)
38+
end
39+
end

0 commit comments

Comments
 (0)