diff --git a/Leecode/src/main/java/com/markilue/leecode/hot100/interviewHot/dfs/LC_1254_ClosedIsland.java b/Leecode/src/main/java/com/markilue/leecode/hot100/interviewHot/dfs/LC_1254_ClosedIsland.java index 32b65e4..f89ba15 100644 --- a/Leecode/src/main/java/com/markilue/leecode/hot100/interviewHot/dfs/LC_1254_ClosedIsland.java +++ b/Leecode/src/main/java/com/markilue/leecode/hot100/interviewHot/dfs/LC_1254_ClosedIsland.java @@ -166,4 +166,33 @@ public class LC_1254_ClosedIsland { return find(grid, i + 1, j) & find(grid, i - 1, j) & find(grid, i, j + 1) & find(grid, i, j - 1); } + + public int closedIsland4(int[][] grid) { + int result = 0; + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[0].length; j++) { + if (grid[i][j] == 0 && dfs2(grid, i, j)) { + result++; + } + } + } + + return result; + + } + + private boolean dfs2(int[][] grid, int i, int j) { + //碰到1则为封闭岛屿;超出边界则为非封闭岛屿 + if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length) { + return false; + } + if (grid[i][j] == 1) { + return true; + } + grid[i][j] = 1; + + + return dfs2(grid, i + 1, j) & dfs2(grid, i, j + 1) & dfs2(grid, i - 1, j) & dfs2(grid, i, j - 1); + } + } diff --git a/Leecode/src/main/java/com/markilue/leecode/hot100/interviewHot/singlestack/LC_503_NextGreaterElements.java b/Leecode/src/main/java/com/markilue/leecode/hot100/interviewHot/singlestack/LC_503_NextGreaterElements.java index fe96130..9db9d39 100644 --- a/Leecode/src/main/java/com/markilue/leecode/hot100/interviewHot/singlestack/LC_503_NextGreaterElements.java +++ b/Leecode/src/main/java/com/markilue/leecode/hot100/interviewHot/singlestack/LC_503_NextGreaterElements.java @@ -91,7 +91,7 @@ public class LC_503_NextGreaterElements { stack.pop(); } if (i < n) result[i] = stack.isEmpty() ? -1 : stack.peek(); - stack.push(nums[i%n]); + stack.push(nums[i % n]); } return result; @@ -114,4 +114,25 @@ public class LC_503_NextGreaterElements { return result; } + + + public int[] nextGreaterElements3(int[] nums) { + + int n = nums.length; + ArrayDeque stack = new ArrayDeque<>(); + + int[] result = new int[n]; + + for (int i = n * 2 - 2; i >= 0; i--) { + while (!stack.isEmpty() && stack.peek() <= nums[i % n]) {//寻找第一个比当前数大的数 + stack.pop(); + } + if (i < n) result[i] = stack.isEmpty() ? -1 : stack.peek(); + stack.push(nums[i % n]); + } + + return result; + + + } }