1 Public classSolution {2 Public int[] MaxNumber (int[] nums1,int[] Nums2,intk) {3 int[] result =New int[K];4 5 for(inti = Math.max (0, k-nums2.length); I <= k && i <= nums1.length; i++) {6 int[] candidate = merge (Getmaxarray (nums1, i), Getmaxarray (NUMS2, K-i), k);7 if(Greater (candidate, 0, result, 0)) {8result =candidate; 9 }Ten } One returnresult; A } - - the Private int[] Merge (int[] nums1,int[] Nums2,intk) { - int[] result =New int[K]; - for(inti = 0, j = 0, index = 0; Index < K; index++) { -Result[index] = Greater (nums1, I, NUMS2, j)? nums1[i++]: nums2[j++]; + } - returnresult; + } A at Private BooleanGreaterint[] nums1,intIint[] Nums2,intj) { - while(I < Nums1.length && J < nums2.length && Nums1[i] = =Nums2[j]) { -i++; -J + +; - } - in returnj = = Nums2.length | | (I < nums1.length && Nums1[i] >nums2[j]); - } to + Private int[] Getmaxarray (int[] Nums,intk) { - int[] result =New int[K]; the for(inti = 0, j = 0; i < nums.length; i++) { * while(Nums.length-i + j > K && J > 0 && result[j-1] <Nums[i]) { $j--;Panax Notoginseng } - the if(J <k) { +Result[j++] =Nums[i]; A } the } + returnresult; - } $}
1. When divide K into the parts, it could is 0 for the all part. So I <= nums1.length.
Create Maximum Number