题目链接:https://leetcode.cn/problems/merge-sorted-array/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int i = 0, j = 0, newlen = m; while (i < newlen && j < n) { // 遍历两个数组并比较大小 if (nums1[i] < nums2[j]) { // nums2的元素大,继续寻找nums1里第一个大于nums2的元素位置 i++; } else { // 找到第一个比nums2大的元素位置,把nums2的元素插入到这个位置 for (int k = newlen; k > i; k--) { // 插入前先把nums1当前位置之后的元素逐个向后移动(从后往前,防止覆盖) nums1[k] = nums1[k-1]; } nums1[i] = nums2[j]; // 把nums2的元素插入nums1 i++; // 继续比较2个数组 j++; newlen++; // 插入了新元素,nums1数组长度加1 } } while (j < n) { // 如果nums2还有没有插入nums1的元素,则全部插入过去,剩余的都是比nums1大的元素 nums1[i++] = nums2[j++]; } } }; |