diff --git a/src/main/java/g2701_2800/s2732_find_a_good_subset_of_the_matrix/Solution.java b/src/main/java/g2701_2800/s2732_find_a_good_subset_of_the_matrix/Solution.java index 6efea9fa6..800bbc89a 100644 --- a/src/main/java/g2701_2800/s2732_find_a_good_subset_of_the_matrix/Solution.java +++ b/src/main/java/g2701_2800/s2732_find_a_good_subset_of_the_matrix/Solution.java @@ -1,50 +1,47 @@ package g2701_2800.s2732_find_a_good_subset_of_the_matrix; // #Hard #Array #Greedy #Matrix #Bit_Manipulation -// #2023_09_22_Time_7_ms_(70.65%)_Space_57.2_MB_(5.43%) +// #2025_02_25_Time_2_ms_(100.00%)_Space_58.01_MB_(13.79%) import java.util.ArrayList; -import java.util.HashMap; +import java.util.Arrays; import java.util.List; -import java.util.Map; public class Solution { + private int[] arr = new int[32]; + public List goodSubsetofBinaryMatrix(int[][] grid) { - int m = grid.length; - int n = grid[0].length; - if (m == 1 && sumArray(grid[0]) == 0) { - return List.of(0); - } - Map pos = new HashMap<>(); - for (int i = 0; i < m; i++) { - for (int mask = 0; mask < (1 << n); mask++) { - boolean valid = true; - for (int j = 0; j < n; j++) { - if ((mask & (1 << j)) != 0 && grid[i][j] + 1 > 1) { - valid = false; - break; - } - } - if (valid && pos.containsKey(mask)) { - return List.of(pos.get(mask), i); - } + List list = new ArrayList<>(); + int n = grid.length; + Arrays.fill(arr, -1); + for (int i = 0; i < n; ++i) { + int j = get(grid[i]); + if (j == 0) { + list.add(i); + return list; + } + if (arr[j] != -1) { + list.add(arr[j]); + list.add(i); + return list; } - int curr = 0; - for (int j = 0; j < n; j++) { - if (grid[i][j] == 1) { - curr = curr | (1 << j); + for (int k = 0; k < 32; ++k) { + if ((k & j) == 0) { + arr[k] = i; } } - pos.put(curr, i); } - return new ArrayList<>(); + return list; } - private int sumArray(int[] arr) { - int sum = 0; - for (int num : arr) { - sum += num; + private int get(int[] nums) { + int n = nums.length; + int rs = 0; + for (int i = 0; i < n; ++i) { + if (nums[i] == 1) { + rs = (rs | (1 << i)); + } } - return sum; + return rs; } } diff --git a/src/main/java/g2701_2800/s2742_painting_the_walls/Solution.java b/src/main/java/g2701_2800/s2742_painting_the_walls/Solution.java index da8c4f90b..11649e322 100644 --- a/src/main/java/g2701_2800/s2742_painting_the_walls/Solution.java +++ b/src/main/java/g2701_2800/s2742_painting_the_walls/Solution.java @@ -10,13 +10,11 @@ public int paintWalls(int[] cost, int[] time) { int[] dp = new int[n + 1]; Arrays.fill(dp, (int) 1e9); dp[0] = 0; - for (int i = 0; i < n; ++i) { for (int j = n; j > 0; --j) { dp[j] = Math.min(dp[j], dp[Math.max(j - time[i] - 1, 0)] + cost[i]); } } - return dp[n]; } }