600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 354. 俄罗斯套娃信封问题(Java动态规划)

354. 俄罗斯套娃信封问题(Java动态规划)

时间:2023-12-07 05:38:05

相关推荐

354. 俄罗斯套娃信封问题(Java动态规划)

拆分成两个子问题:对二维数组按照一定的方式排序 + LIS算法

步骤:

首先先对宽度进行升序排序,当遇到宽度相同的情况时,就按高度降序排序;之后把所有的高度作为一个数组,在这个数组上使用LIS

然后…然后就超时了,这测试用例貌似是更新了

但是大致的解法步骤和方向基本上是没有问题的

class Solution {public int maxEnvelopes(int[][] envelopes) {int n = envelopes.length;Arrays.sort(envelopes,new Comparator<int[]>(){public int compare(int[] o1,int[] o2){return o1[0]==o2[0]?o2[1]-o1[1]:o1[0]-o2[0];}});int[] height = new int[n];for(int i =0;i<n;i++){height[i] = envelopes[i][1];}return lengthOfLIS(height);}public int lengthOfLIS(int[] nums){int[] dp = new int[nums.length];Arrays.fill(dp,1);for(int i = 0;i<nums.length;i++){for(int j = 0;j<i;j++){if(nums[i]>nums[j]){dp[i] = Math.max(dp[i],dp[j]+1);}}}int res = 0;for(int i = 0;i<dp.length;i++){res = Math.max(res,dp[i]);}return res;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。