当前位置: 首页 > article >正文

【Leecode】Leecode刷题之路第88天之合并两个有序数组

题目出处

88-合并两个有序数组-题目出处

题目描述

在这里插入图片描述

个人解法

思路:

todo

代码示例:(Java)

todo

复杂度分析

todo

官方解法

88-合并两个有序数组-官方解法

方法1:直接合并后排序

思路:

在这里插入图片描述

代码示例:(Java)

public class Solution1 {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for (int i = 0; i != n; ++i) {
            nums1[m + i] = nums2[i];
        }
        Arrays.sort(nums1);
    }


}

复杂度分析

在这里插入图片描述

方法2:双指针

思路:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码示例:(Java)

public class Solution2 {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = 0, p2 = 0;
        int[] sorted = new int[m + n];
        int cur;
        while (p1 < m || p2 < n) {
            if (p1 == m) {
                cur = nums2[p2++];
            } else if (p2 == n) {
                cur = nums1[p1++];
            } else if (nums1[p1] < nums2[p2]) {
                cur = nums1[p1++];
            } else {
                cur = nums2[p2++];
            }
            sorted[p1 + p2 - 1] = cur;
        }
        for (int i = 0; i != m + n; ++i) {
            nums1[i] = sorted[i];
        }
    }


}

复杂度分析

在这里插入图片描述

方法3:逆向双指针

思路:

在这里插入图片描述

代码示例:(Java)

public class Solution3 {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = m - 1, p2 = n - 1;
        int tail = m + n - 1;
        int cur;
        while (p1 >= 0 || p2 >= 0) {
            if (p1 == -1) {
                cur = nums2[p2--];
            } else if (p2 == -1) {
                cur = nums1[p1--];
            } else if (nums1[p1] > nums2[p2]) {
                cur = nums1[p1--];
            } else {
                cur = nums2[p2--];
            }
            nums1[tail--] = cur;
        }
    }


}

复杂度分析

在这里插入图片描述

考察知识点

收获

Gitee源码位置

88-合并两个有序数组-源码


http://www.kler.cn/a/447558.html

相关文章:

  • 安装milvus以及向量库增删改操作
  • Redis篇--常见问题篇5--热Key(Hot Key,什么是热Key,服务降级,一致性哈希)
  • SpringBoot开发——整合JSONPath解析JSON信息
  • 前端小白学习之路-Vben探索 vite 配置 - 1/50
  • flask before_request 请求拦截器返回无值则放行,有值则拦截
  • C语言经典100例
  • Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门任务间的通讯-信号量【入门三】
  • 前端项目打包部署后,如何避免让用户强制去清除浏览器缓存
  • STM32低功耗模式结合看门狗
  • 【RK3588 Linux 5.x 内核编程】-内核中断与ThreadedIRQ
  • 学习Cookie 提升
  • 裸机按键输入实验
  • linux源码编译libunwind
  • 条款34 考虑lambda而非std::bind
  • JS中的innerHTML,innerText,value的区别
  • STM32-笔记5-按键点灯(中断方法)
  • java线程
  • Unity实用技能-协作规范总结
  • MySQL数据库下载及安装教程
  • linux美化命令行
  • 文件I/O操作:C语言
  • 纯血鸿蒙APP实战开发——Text实现部分文本高亮和超链接样式
  • el-tabs标签过多
  • TCP与UDP的端口连通性
  • Ubuntu22.04安装CH340/CH341驱动
  • Python自动化测试图片比对算法