面试经典 150 题:力扣88. 合并两个有序数组

每周一道算法题启动

题目

【题目链接】

【解法一】合并后排序

排序后的数组自动省略0的数字,又学到了

cpp 复制代码
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        //合并两个数组后排序
        for(int i=0; i<n; i++)
        {
            nums1[m + i] = nums2[i];
        }
        sort(nums1.begin(), nums1.end());
    }
};

【解法二】双指针

时间复杂度:O(m+n)

cpp 复制代码
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        //双指针
        int pointer1=0, pointer2=0;
        int temporary;
        vector<int> num3(m+n); //数组存放
        //防止越界
        while(pointer1 < m || pointer2 < n)
        {
            //第一个数组没数放了,第二个数组还有剩的比第一个数组所有数都要大的
            //特判情况
            if(pointer1 == m) 
            {
                temporary = nums2[pointer2++];
            }
            else if(pointer2 == n)
            {
                temporary = nums1[pointer1++];
            }
        //这里不能等于,要是0的话会放进去,造成不必要麻烦
            else if(nums1[pointer1] > nums2[pointer2])
            {
                temporary = nums2[pointer2++];
            }
            else
            {
                temporary = nums1[pointer1++];
            }
            num3[pointer1 + pointer2 - 1] = temporary;
        }
        //复制数组回去num1
        nums1 = num3;
    }
};

执行用时这个不是程序运行时间嗷!

相关推荐
pzx_001几秒前
【机器学习】K折交叉验证(K-Fold Cross-Validation)
人工智能·深度学习·算法·机器学习
BanLul1 分钟前
进程与线程 (三)——线程间通信
c语言·开发语言·算法
一个 00 后的码农12 分钟前
25林业研究生复试面试问题汇总 林业专业知识问题很全! 林业复试全流程攻略 林业考研复试真题汇总
考研·面试·面试问题·考研复试·考研调剂·面试真题·林业考研
qy发大财23 分钟前
分发糖果(力扣135)
数据结构·算法·leetcode
haaaaaaarry1 小时前
【分治法】线性时间选择问题
数据结构·算法
CS创新实验室1 小时前
计算机考研之数据结构:P 问题和 NP 问题
数据结构·考研·算法
OTWOL2 小时前
【C++编程入门基础(一)】
c++·算法
谏君之2 小时前
C语言实现的常见算法示例
c语言·算法·排序算法
机器视觉知识推荐、就业指导2 小时前
【数字图像处理二】图像增强与空域处理
图像处理·人工智能·经验分享·算法·计算机视觉
WeiLai11123 小时前
面试基础--微服务架构:如何拆分微服务、数据一致性、服务调用
java·分布式·后端·微服务·中间件·面试·架构