地址 https://leetcode-cn.com/problems/merge-sorted-array/
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。 示例 1: 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 示例 2: 输入:nums1 = [1], m = 1, nums2 = [], n = 0 输出:[1] 提示: nums1.length == m + n nums2.length == n 0 <= m, n <= 200 1 <= m + n <= 200 -109 <= nums1[i], nums2[i] <= 109
解答1
由于数组是有序的 所以新开一个数组,使用两个指针指向两个数组的当前需要处理的点
根据数的大小 决定处理哪个数. 过程如下
代码
class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { vector<int> ans; int l=0;int r=0; while(l<m && r < n){ if(nums1[l] <= nums2[r]){ ans.push_back(nums1[l]);l++; }else{ ans.push_back(nums2[r]);r++; } } while(l<m){ ans.push_back(nums1[l]);l++; } while(r<n){ ans.push_back(nums2[r]);r++; } nums1 =ans; return; } };
同样的 可以直接使用NUMS1 作为存储的数组 逆序比较即可
如图