/** 双指针 初始化三个指针 p1 = m - 1 , p2 = n - 1 p = m + n - 1 核心思想就是从后往前进行合并 因为nums1后面的位置是空的 一个极端的情况 如果nums1中所有元素都比nums2大 那么就是将nums1中所有元素都移动到后面 而此时相当于nums1前面的位置都空出来了 直接填入nums2即可 不需要考虑覆盖问题 */ classSolution { publicvoidmerge(int[] nums1, int m, int[] nums2, int n) { intp= m + n - 1; intp1= m - 1; intp2= n - 1;
classSolution { publicvoidmerge(int[] nums1, int m, int[] nums2, int n) { PriorityQueue<Integer>pq = newPriorityQueue<>((o1,o2)->o1 - o2); for(inti=0 ; i < m ; i++){ pq.add(nums1[i]); }
for(inti=0 ; i < n ; i++){ pq.add(nums2[i]); } for(inti=0 ; i < m + n ; i++){ nums1[i] = pq.poll(); }