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,直接循环把元素覆盖到剩下位置即可

猜你喜欢

转载自www.cnblogs.com/chanaichao/p/9630266.html
今日推荐