160.Merge Sorted Array
题目:
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
给定两个排序的整数数组nums1和nums2,将nums2合并为nums1作为一个排序的数组。
Note:
- The number of elements initialized in nums1 and nums2 are m and n respectively.在nums1和nums2中初始化的元素数分别为m和n。
- You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.您可以假设nums1有足够的空间(大小大于或等于m + n)来保存nums2中的其他元素。
Example:
Input: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 Output: [1,2,2,3,5,6]
解答:
1 class Solution { 2 public void merge(int[] nums1, int m, int[] nums2, int n) { 3 int i=m-1,j=n-1,q=m+n-1; //i为nums1的指针指向末尾,j为nums2的指针指向末尾,nums1和nums2合并后总元素数为m+n,合并后的数组指针为m+n-1 4 while(i>=0 && j>=0) 5 nums1[q--]= (nums1[i]>nums2[j]) ? nums1[i--]:nums2[j--]; 6 while(j>=0) 7 nums1[q--]=nums2[j--]; 8 } 9 }
详解:
合并后nums1数组大小为m+n,从数组的最后一个元素往前赋值,num1和nums2最后一个元素中较大的放在最后,再把指针前移。
若nums1中所有元素都小于nums2,则nums1前m个保持不变。;
若nums1中的元素个数m<n,那么nums1循环结束,nums2还有元素未加入nums1,直接循环把元素覆盖到剩下位置即可