面试经典 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;
    }
};

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

相关推荐
西柚小萌新3 小时前
【岗位面试】--成都博维数孪 - 工业 AI 解决方案顾问
人工智能·面试·职场和发展
小 黄 鸡3 小时前
Flutter 面试必会知识点详解(从基础到进阶)
flutter·面试·职场和发展
Navigator_Z4 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy4 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
mmmmath_35 小时前
LeetCode.104.二叉树的最大深度
数据结构·leetcode
YangYang9YangYan5 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl26 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风6 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先
梦帮科技6 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法