|
2 | 2 |
|
3 | 3 | public class Main {
|
4 | 4 |
|
5 |
| - public int maxSubArray(int[] nums) { |
6 |
| - int[] dp = new int[nums.length]; |
7 |
| - int max = Integer.MIN_VALUE; |
8 |
| - for (int i = 0; i < nums.length; i++) { |
9 |
| - dp[i] = Math.max(i > 0 ? dp[i - 1] + nums[i] : nums[i], nums[i]); |
10 |
| - max = Math.max(max, dp[i]); |
| 5 | + public ListNode mergeKLists(ListNode[] lists) { |
| 6 | + return helper(lists, 0, lists.length - 1); |
| 7 | + } |
| 8 | + |
| 9 | + private ListNode helper(ListNode[] lists, int start, int end) { |
| 10 | + if (start > end) { |
| 11 | + return null; |
| 12 | + } |
| 13 | + if (start == end) { |
| 14 | + return lists[start]; |
11 | 15 | }
|
12 |
| - return max; |
| 16 | + int mid = start + (end - start) / 2; |
| 17 | + ListNode l1 = helper(lists, start, mid); |
| 18 | + ListNode l2 = helper(lists, mid + 1, end); |
| 19 | + return mergeTwoLists(l1, l2); |
13 | 20 | }
|
14 | 21 |
|
15 |
| - public int maxSubArray2(int[] nums) { |
16 |
| - int max = Integer.MIN_VALUE, prev = 0; |
17 |
| - for (int i = 0; i < nums.length; i++) { |
18 |
| - prev = Math.max(i > 0 ? prev + nums[i] : nums[i], nums[i]); |
19 |
| - max = Math.max(max, prev); |
| 22 | + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { |
| 23 | + ListNode dummy = new ListNode(0); |
| 24 | + ListNode p = l1, q = l2, cur = dummy; |
| 25 | + for ( ; p != null && q != null; ) { |
| 26 | + if (p.val < q.val) { |
| 27 | + cur.next = p; |
| 28 | + p = p.next; |
| 29 | + } else { |
| 30 | + cur.next = q; |
| 31 | + q = q.next; |
| 32 | + } |
| 33 | + cur = cur.next; |
20 | 34 | }
|
21 |
| - return max; |
| 35 | + cur.next = p != null ? p : q; |
| 36 | + return dummy.next; |
22 | 37 | }
|
23 | 38 |
|
24 | 39 | public static void main(String[] args) {
|
|
0 commit comments