给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
刚开始的思路是直接从头开始比较插入,但是有点麻烦。
后来借鉴别人的思路: 从后向前写。
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ int tail = m + n - 1; --m; --n; while (m >= 0 && n >= 0) { if (nums1[m] > nums2[n]) nums1[tail--] = nums1[m--]; else nums1[tail--] = nums2[n--]; } while (n >= 0) { nums1[tail--] = nums2[n--]; } }
自己简单用C++改了一下:
class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { cout << nums1.size() << "," << nums2.size() << ":"; if(m == 0) { nums1 = nums2; return; } int i = m-1; int j = n-1; int tail = m+n-1; while(i>=0&&j>=0) { if(nums1[i] >= nums2[j] ){ nums1[tail] = nums1[i]; i--; tail--; } else { nums1[tail] = nums2[j]; j--; tail--; } } while(j >=0) { cout << "j:" << j << endl; nums1[j] = nums2[j]; j--; } } };
马上找工作喽。