|
2 | 2 |
|
3 | 3 | public class Main {
|
4 | 4 |
|
5 |
| - public int search(int[] nums, int target) { |
6 |
| - int left = 0, right = nums.length - 1; |
| 5 | + public String nextClosestTime(String time) { |
| 6 | + int[] number = new int[4]; |
7 | 7 |
|
8 |
| - while (left <= right) { |
9 |
| - int mid = left + (right - left) / 2; |
| 8 | + time = time.substring(0, 2) + time.substring(3); |
10 | 9 |
|
11 |
| - if (nums[left] < nums[mid]) { |
12 |
| - if (target >= nums[left] && target < nums[mid]) { |
13 |
| - right = mid - 1; |
14 |
| - } else if (target == nums[mid]) { |
15 |
| - return mid; |
16 |
| - } else { |
17 |
| - left = mid + 1; |
18 |
| - } |
19 |
| - } else if (nums[left] == nums[mid]) { |
20 |
| - if (target == nums[mid]) { |
21 |
| - return mid; |
22 |
| - } else { |
23 |
| - left++; |
24 |
| - } |
25 |
| - } |
26 |
| - else { |
27 |
| - if (target > nums[mid] && target <= nums[right]) { |
28 |
| - left = mid + 1; |
29 |
| - } else if (target == nums[mid]) { |
30 |
| - return mid; |
31 |
| - } else { |
32 |
| - right = mid - 1; |
33 |
| - } |
34 |
| - } |
| 10 | + for (int i = 0; i < time.length(); i++) { |
| 11 | + number[i] = time.charAt(i) - '0'; |
35 | 12 | }
|
36 | 13 |
|
37 |
| - return -1; |
38 |
| - } |
| 14 | + Arrays.sort(number); |
39 | 15 |
|
40 |
| - // [3,1], 1 |
41 |
| - public int search2(int[] nums, int target) { |
42 |
| - int left = 0, right = nums.length - 1; |
| 16 | + StringBuilder sb = new StringBuilder(time); |
43 | 17 |
|
44 |
| - while (left <= right) { |
45 |
| - int mid = left + (right - left) / 2; |
46 |
| - |
47 |
| - if (target == nums[mid]) { |
48 |
| - return mid; |
49 |
| - } |
50 |
| - |
51 |
| - if (nums[left] <= nums[mid]) { |
52 |
| - if (target >= nums[left] && target < nums[mid]) { |
53 |
| - right = mid - 1; |
54 |
| - } else { |
55 |
| - left = mid + 1; |
56 |
| - } |
57 |
| - } else { |
58 |
| - if (target > nums[mid] && target <= nums[right]) { |
59 |
| - left = mid + 1; |
60 |
| - } else { |
61 |
| - right = mid - 1; |
| 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; |
62 | 26 | }
|
| 27 | + sb.setCharAt(i, c); |
63 | 28 | }
|
64 | 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 | + } |
65 | 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 | + } |
66 | 49 | return -1;
|
67 | 50 | }
|
68 | 51 |
|
69 | 52 | public static void main(String[] args) {
|
| 53 | + String s = new NextClosestTime().nextClosestTime("13:55"); |
| 54 | + System.out.println(s); |
70 | 55 | }
|
71 | 56 | }
|
0 commit comments