标签:位置 vector blog cas span return turn sort merge
Given two sorted integer arrays nums1 and nums2, merge nums2 intonums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal tom +
n) to hold additional elements from nums2. The number of elements initialized innums1 and
nums2 are m and n respectively.
从给出的testcase来看似乎是默认升序排列的。首先将nums1扩充到m+n个元素,然后用i和j分别指向nums1和nums2原始元素的末尾,k指向扩充序列的末尾。
比较nums1和nums2末尾元素大小,填入扩充后序列的末尾。
一种可能的情况是i先到头了,j没有到头,这时把nums2里剩下的元素直接拷贝到nums1里。
对于j先到头,i没有到头的情况,无需额外处理,剩下的数字本来就在nums1的对应位置上。
class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { bool incOrder = true; if (n == 0) return; if (m == 0) { nums1 = nums2; return; } int i , j; int k = m+n-1; for (i=nums1.size();i<m+n;i++) nums1.push_back(0); for (i=m-1,j=n-1;i>=0 && j>=0;) { nums1[k--] = (nums1[i] > nums2[j]) ? nums1[i] : nums2[j]; if (nums1[i] > nums2[j]) i --; else j--; } if (i<0) { while (j>=0) { nums1[j] = nums2[j]; j--; } } return ; } };
标签:位置 vector blog cas span return turn sort merge
原文地址:http://www.cnblogs.com/shawnye/p/5984096.html