信封嵌套问题

梦里梦外; 2022-10-29 10:27 213阅读 0赞
  1. /** * 给出一些信封,每个信封用宽度和高度的整数对形式(w,h)表示,当一个信封的宽度和高度都比另外一个信封大的时候,那么就可以放进去, * 请计算最多能套几层? * 二维最长递增子序列问题 */
  2. public class Solution5 {
  3. public static void main(String[] args) {
  4. int[][] nums = new int[][]{ { 1,8},{ 2,3},{ 5,4},{ 5,2},{ 6,7},{ 6,4}};
  5. System.out.println(maxNum(nums));
  6. }
  7. static int maxNum(int[][] nums) {
  8. Arrays.sort(nums, new Comparator<int[]>() {
  9. @Override
  10. public int compare(int[] o1, int[] o2) {
  11. return o1[0] == o2[0] ? o2[1] - o1[1] : o1[0] - o2[0];
  12. }
  13. });
  14. int[] height = new int[nums.length];
  15. for (int i = 0; i < nums.length; i++) {
  16. height[i] = nums[i][1];
  17. }
  18. return LIS(height);
  19. }
  20. /** dp[i]表示以height[i]结尾的最长递增子序列的长度*/
  21. static int LIS(int[] height) {
  22. int[] dp = new int[height.length];
  23. // base case
  24. Arrays.fill(dp, 1);
  25. for (int i = 0; i < height.length; i++) {
  26. for (int j = 0; j < i; j++) {
  27. if (height[i] > height[j]) {
  28. dp[i] = Math.max(dp[i], dp[j] + 1);
  29. }
  30. }
  31. }
  32. int res = Integer.MIN_VALUE;
  33. for (int i = 0; i < dp.length; i++) {
  34. res = Math.max(res, dp[i]);
  35. }
  36. return res;
  37. }
  38. }

发表评论

表情:
评论列表 (有 0 条评论,213人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c语言信封比大小,从C打印信封

    我试图做一个应用程序,将打印信封(自定义和正常)。 Im设置要打印的大小和页面,但当即时打印或查看打印预览时,页面大小仍然相同。基本上,该应用程序是3组合框(0:挑自定义大小,

    相关 信封嵌套问题

    / 给出一些信封,每个信封用宽度和高度的整数对形式(w,h)表示,当一个信封的宽度和高度都比另外一个信封大的时候,那么就可以放进去, 请计算最多能套几层? 二维最

    相关 数字信封工作原理

    数字信封是指发送方使用接收方的公钥来加密对称密钥后所得的数据,其目的是用来确保对称密钥传输的安全性。采用数字信封时,接收方需要使用自己的私钥才能打开数字信封得到对称密钥。

    相关 数字信封

    1.定义:       数字信封是将对称密钥通过非对称加密(即:有公钥和私钥两个)的结果分发对称密钥的方法。数字信封是实现信息完整性验证的技术。(数字信封技术使用两层加密体系