参考回答:
解法一:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int num[m+n];//新建一个数组,对nums1和nums2排序,排完序赋值给nums1
int i = 0,j = 0,k = 0;
while(i<m && j<n){
if(nums1[i] <= nums2[j])
num[k++] = nums1[i++];
else
num[k++] = nums2[j++];
}
while(i < m) num[k++] = nums1[i++];
while(j < n) num[k++] = nums2[j++];
copy(num,num+m+n,nums1.begin());
}
};
解法二:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
vector<int> num(m+n);//与解法一类似,不过是新建一个vector
int i = 0,j = 0,k = 0;
while(i<m && j<n){
if(nums1[i] <= nums2[j])
num[k++] = nums1[i++];
else
num[k++] = nums2[j++];
}
while(i < m) num[k++] = nums1[i++];
while(j < n) num[k++] = nums2[j++];
nums1.assign(num.begin(),num.end());//nums1.swap(num)也可以
}
};
解法三:直接在nums1里进行操作,从nums1的尾部开始,取nums1和nums2中的最大值放入其中。如果n先到达0就能直接得到合并好的数组;如果m先到达0,只需将n剩下的元素复制到nums1中即可。
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int k=m+n;
while(m>0 && n>0){
if(nums1[m-1] >= nums2[n-1]){
nums1[k-1] = nums1[m-1];
--k;
--m;
}
else{
nums1[k-1] = nums2[n-1];
--k;
--n;
}
}
while(n > 0){
nums1[k-1] = nums2[n-1];
--k;
--n;
}
}
};
本文向大家介绍手写代码:合并两个排序数组相关面试题,主要包含被问及手写代码:合并两个排序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答:
本文向大家介绍手写代码:合并有序数组相关面试题,主要包含被问及手写代码:合并有序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 解法一:从结尾开始归并,不会覆盖元素。从A[n+m-1]处开始往前一个元素一个元素的求,每次都要比较A[i]和B[j]的大小。需要注意的是,要考虑到: A和B有一个为空时的情况 解法二:由于合并后A数组的大小必定是m+n,所以从最后面开始往前赋值,先比较A和B
本文向大家介绍请你手写代码,如何合并两个有序链表相关面试题,主要包含被问及请你手写代码,如何合并两个有序链表时的应答技巧和注意事项,需要的朋友参考一下 参考回答:
本文向大家介绍手写代码:两个平衡二叉树合并是怎么做的相关面试题,主要包含被问及手写代码:两个平衡二叉树合并是怎么做的时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先,将两棵树分别展开为有序链表 然后将两个有序链表合并
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,
本文向大家介绍C++实现两个有序数组的合并,包括了C++实现两个有序数组的合并的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现两个有序数组合并的具体代码,供大家参考,具体内容如下 剑指offer面试题5延展题: 问题:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空间容纳A2。请实现一个函数,把A2中所有数字插入A1中,并且所有的数字是排序(默认升序)的。 思路:在