File tree Expand file tree Collapse file tree 4 files changed +3
-55
lines changed Expand file tree Collapse file tree 4 files changed +3
-55
lines changed Original file line number Diff line number Diff line change @@ -96,6 +96,6 @@ return -1;
96
96
不能直接写return o1 > o2 ? 1 : -1;
97
97
因为可能存在重复的数,在TreeMap中查找key时通过comparator等于0,上述写法导致永远找不到key。
98
98
99
- 三十,StringBuilder的insert(0, c)不要频繁调用,不如append,最后reverse。
99
+ 三十,StringBuilder的insert(0, c)不要频繁调用,看源码要array copy,性能很差。 不如append,最后reverse。
100
100
101
101
三十一,List在allAll一个PriorityQueue时,是不会带顺序的,正确的做法是while(!queue.isEmpty()) {list.add(queue.poll());}
Original file line number Diff line number Diff line change 2
2
* 将字符串s按长度k为一组,从右往左重排,组之间用"-"分隔,还要转成大写
3
3
* 注意别在最前面多加一个"-",即下面判断i != 0
4
4
*/
5
-
6
-
7
5
public class LicenseKeyFormatting {
8
6
9
- // 耗时22ms
7
+ // 耗时13ms
10
8
public String licenseKeyFormatting (String S , int K ) {
11
9
StringBuilder sb = new StringBuilder ();
12
10
13
11
for (int i = S .length () - 1 , j = 0 ; i >= 0 ; i --) {
14
12
if (S .charAt (i ) != '-' ) {
15
13
if (j % K == 0 && sb .length () > 0 ) {
16
14
sb .append ("-" );
17
- j = 0 ;
18
15
}
19
16
20
17
sb .append (Character .toUpperCase (S .charAt (i )));
Original file line number Diff line number Diff line change 5
5
6
6
public class MeetingRoomsII {
7
7
8
- // 耗时17ms ,时间复杂度O(nlgn)
8
+ // 耗时7ms ,时间复杂度O(nlgn)
9
9
public int minMeetingRooms (Interval [] intervals ) {
10
10
Arrays .sort (intervals , new Comparator <Interval >() {
11
11
@ Override
Original file line number Diff line number Diff line change 2
2
3
3
public class Main {
4
4
5
- public String nextClosestTime (String time ) {
6
- int [] number = new int [4 ];
7
-
8
- time = time .substring (0 , 2 ) + time .substring (3 );
9
-
10
- for (int i = 0 ; i < time .length (); i ++) {
11
- number [i ] = time .charAt (i ) - '0' ;
12
- }
13
-
14
- Arrays .sort (number );
15
-
16
- StringBuilder sb = new StringBuilder (time );
17
-
18
- int i ;
19
- for (i = 3 ; i >= 0 ; i --) {
20
- char c = time .charAt (i );
21
- int k = nextNumber (number , c - '0' );
22
- if (k >= 0 ) {
23
- sb .setCharAt (i , (char ) (k + '0' ));
24
- if (isValid (sb )) {
25
- break ;
26
- }
27
- sb .setCharAt (i , c );
28
- }
29
- }
30
- for (i ++; i < 4 ; i ++) {
31
- sb .setCharAt (i , (char ) (number [0 ] + '0' ));
32
- }
33
- sb .insert (2 , ':' );
34
- return sb .toString ();
35
- }
36
-
37
- private boolean isValid (StringBuilder sb ) {
38
- boolean flag1 = sb .charAt (0 ) < '2' || (sb .charAt (0 ) == '2' && sb .charAt (1 ) <= '3' );
39
- boolean flag2 = sb .charAt (2 ) < '5' || (sb .charAt (2 ) == '5' && sb .charAt (3 ) <= '9' );
40
- return flag1 && flag2 ;
41
- }
42
-
43
- private int nextNumber (int [] number , int n ) {
44
- for (int i = 0 ; i < number .length ; i ++) {
45
- if (number [i ] > n ) {
46
- return number [i ];
47
- }
48
- }
49
- return -1 ;
50
- }
51
-
52
5
public static void main (String [] args ) {
53
- String s = new NextClosestTime ().nextClosestTime ("13:55" );
54
- System .out .println (s );
55
6
}
56
7
}
You can’t perform that action at this time.
0 commit comments