public class Solution_wei { public int buildingBlocks(int[][] blocks) { int len = blocks.length; if (len == 0) { return 0; } // 最后的返回值 int result = 0; // 保证长 > 宽 for (int i = 0; i < len; i++) { if (blocks[i][0] < blocks[i][1]) { int[] block = blocks[i]; int temp = block[0]; block[0] = block[1]; block[1] = temp; } } // 按第一维的增序排列 // 按第二维降序 Arrays.sort(blocks, (a1, a2) -> { return a1[0] != a2[0] ? a1[0] - a2[0] : a2[1] - a1[1]; } ); int[] dp = new int[len]; Arrays.fill(dp, 1); for (int i = 0; i < len; i++) { for (int j = 0; j < i; j++) { if (blocks[i][1] >= blocks[j][1]) { dp[i] = Math.max(dp[i], dp[j] + 1); } } } // 找到最大值 for (int i = 0; i < len; i++) { result = Math.max(result, dp[i]); } return result; } public static void main(String[] args) { int[][] blocks = { {5, 4}, {6, 3}, {6, 7}, {6, 6} }; int[][] blocks2 = { {5, 4}, {6, 3}, {6, 7}, {6, 6}, {4, 6} }; Solution_wei obj = new Solution_wei(); int i = obj.buildingBlocks(blocks); System.out.println(i); int j = obj.buildingBlocks(blocks2); System.out.println(j); }}