【面试经典150题】合并两个有序数组

目录

一.利用库函数sort

首先我们先来看下题目的描述:

两个非递减的数组重新排列成非递减顺序到第一个数组中,并且第一个数组已经提前开好了空间 。我们完全可以将nums2数组先放进nums1数组后面,然后整体对nums1进行排序即可

cpp 复制代码
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int i = 0;
        int k = 0;
        for (i = m; i < m + n; i++)
        {
            nums1[i] = nums2[k++];
        }
        sort(nums1.begin(), nums1.end());

    }
};

二.逆双指针

双指针的思路即是分别在nums1的有效数据位、空间位置和nums2的最后数据位置做记录。接着逆遍历数组,比较两者较大的一个放在nums1空间位置 ,然后减减继续遍历。循环条件就是nums1或者nums2的指针都没有向前越界。最后要再加个循环将nums2中未放置完的元素继续放入,这里的循环不是放nums1的元素是因为 ,即使在上一个循环nums1没有放完,它待在原本的位置也是符合条件的(原本就是非递减的数组)。

cpp 复制代码
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int i  = m -1;
        int j  = n -1;
        int k  = n+m-1;
        while(i>=0&&j>=0)
        {
            if(nums1[i]>nums2[j])
            {
                nums1[k--]=nums1[i--];
            }
            else
            {
                nums1[k--]=nums2[j--];
            }
        }
        while(j>=0)
        {
                nums1[k--]=nums2[j--];

        }

       
    }
};
相关推荐
Mr YiRan2 小时前
C++面向对象继承与操作符重载
开发语言·c++·算法
香芋Yu6 小时前
【大模型面试突击】10_推理部署与优化
面试·职场和发展
蚊子码农6 小时前
算法题解记录--239滑动窗口最大值
数据结构·算法
liliangcsdn7 小时前
A3C算法从目标函数到梯度策略的探索
算法
八月的冰可乐7 小时前
【无标题】
ai·面试
陈天伟教授7 小时前
人工智能应用- 材料微观:06.GAN 三维重构
人工智能·神经网络·算法·机器学习·重构·推荐算法
liliangcsdn8 小时前
A3C强化学习算法的探索和学习
算法
Figo_Cheung8 小时前
Figo《量子几何学:从希尔伯特空间到全息时空的统一理论体系》(二)
算法·机器学习·几何学·量子计算
额,不知道写啥。8 小时前
HAO的线段树(中(上))
数据结构·c++·算法
LYS_06188 小时前
C++学习(5)(函数 指针 引用)
java·c++·算法