354. Russian Doll Envelopes

从我花时间上看,我是纠结排序很久。注意一下Comparator的写法,以后会了就好~

算法上讲,就是对envolope尺寸排序,然后对于排序后的每个信封,它可以装进的最多小信封数,是长宽都比它小的信封中装的进最多数目+1。和之前做的368. Largest Divisible Subset思路是一样的,甚至还要简单一点。

动规。

 1     static class MySort implements Comparator<int[]> {
 2         public int compare(int[] o1, int[] o2) {
 3             for(int i = 0; i < o1.length; i++) {
 4                 if(o1[i] != o2[i]) {
 5                     return o1[i] - o2[i];
 6                 }
 7             }
 8             return 0;
 9         }
10     }
11     
12     public int maxEnvelopes(int[][] envelopes) {
13         if(envelopes.length == 0 || envelopes[0].length == 0) {
14             return 0;
15         }
16         MySort mysort = new MySort();
17         Arrays.sort(envelopes, mysort);
18         int len = envelopes.length;
19         int[] res = new int[len];
20         int max = 1;
21         for(int i = 0; i < len; i++) {
22             res[i] = 1;
23         }
24         for(int i = 1; i < envelopes.length; i++) {
25             for(int j = i-1; j >= 0; j--) {
26                 if(envelopes[i][0] > envelopes[j][0] && envelopes[i][1] > envelopes[j][1]) {
27                     res[i] = Math.max(res[j] + 1, res[i]);
28                     max = Math.max(max, res[i]);
29                 }
30             }
31         }
32         return max;   
33     }

 

posted @ 2016-06-29 03:55  warmland  阅读(167)  评论(0编辑  收藏  举报