合并到一个新的数组,直接比较就好了,这个题目是将nums1、nums2合并到nums1,nums1有许多多余的空间
如果按照合并到一个新的数组从小比到大的方式进行比较,就需要每次挪动nums1的数组。
本题可以采用从大到小的比较方式,这样就不用每次挪动数组。
同时注意,m和n都是可以为0的,nums1不能为空,但nums2可以为空
最后只有while(n > 0),因为如果保留的是m >0,就保持原来的数组就好了
class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { if(nums1.empty() || nums2.empty()) return; while(m > 0 && n > 0){ if(nums1[m-1] < nums2[n-1]){ nums1[m + n -1] = nums2[n - 1]; n--; } else{ nums1[m + n - 1] = nums1[m - 1]; m--; } } while(n > 0){ nums1[n - 1] = nums2[n - 1]; n--; } return; } };