合并两个有序数组

简介: 给你两个按 **非递减顺序** 排列的整数数组 `nums1` 和 `nums2`,另有两个整数 `m` 和 `n` ,分别表示 `nums1` 和 `nums2` 中的元素数目。

1、题目描述

  给你两个按 非递减顺序 排列的整数数组 nums1nums2,另有两个整数 mn ,分别表示 nums1nums2 中的元素数目。

  请你 合并 nums2nums1 中,使合并后的数组同样按 非递减顺序 排列。

  注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n

  示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

  示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。

  示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

提示:

  • nums1.length == m + n
  • nums2.length == n
  • 0 <= m, n <= 200
  • 1 <= m + n <= 200
  • $-10^9<=nums1[i],nums2[j]<=10^9$

2、解决方案

  双指针法。

  数组已经排好序了,那我们就每次从两个数组头部取出两个数字,然后比较,将数值较小的那个加入到结果中就行,然后谁被加入到结果中,那么那个数组的工作指针后移,没加入的不动就行。

  当其中一个数组空的时候(两个数组长度可能不一致),把剩下那个数组直接全部加入到结果数组中即可。

3、代码实现

package leetcode1;
//合并两个有序数组
public class LeetCode88 {
    public static void merge(int[] nums1,int m,int[] nums2,int n){
        int i=0;
        int j=0;
        int k=0;
        int[] num=new int[m+n];
        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++];
        }
        for (int i1 = 0; i1 < num.length; i1++) {
            nums1[i1]=num[i1];
        }
    }

    public static void main(String[] args) {
        int[] nums1=new int[]{1,2,3,0,0,0};
        int[] nums2=new int[]{2,5,6};
        int m=3;
        int n=3;
        merge(nums1,m,nums2,n);
        for (int i : nums1) {
            System.out.print(i+" ");
        }
    }

}

image-20221023100811163

目录
相关文章
|
4月前
|
Ubuntu 安全 应用服务中间件
宝塔面板搭建教程 | 完整的云服务器部署实践:Ubuntu + 宝塔 + WordPress
本文记录了从零搭建云服务器与个人博客的完整实践:涵盖Ubuntu Server选型、安全组配置、SSH连接、Nginx部署,以及通过宝塔面板+Docker快速上线WordPress博客的全过程。内容详实,步骤清晰,兼顾学习深度与落地效率,适合初学者系统掌握Linux运维与Web部署核心技能。(239字)
|
5月前
|
存储 弹性计算 安全
最大直降90%!2026年阿里云新老、企业用户云服务器优惠权益参考
2026年,阿里云持续发力普惠云计算,针对新用户、老用户、企业用户、学生及教师等不同群体,推出了覆盖服务器选购、续费、升级、迁移全场景的优惠权益,核心呈现“入门款长效低价、中高配阶梯降价、续费同价+叠加折扣”的特点,既降低了新手入门门槛,也兼顾了老用户与企业用户的长期使用成本,优惠力度最大直降90%,规则透明无隐藏消费。
1092 1
|
5月前
|
人工智能 JavaScript 安全
阿里云+Windows本地部署OpenClaw全栈指南:集成8大开源Dashboard,告别管理混乱
2026年,OpenClaw(原Clawdbot)作为自托管AI代理框架,凭借开源可控、全场景自动化的优势,已成为个人提效与企业数字化转型的核心工具。但随着多Agent协作、技能插件增多,用户普遍面临“管理混乱”的痛点——十几个AI Agent同时运行,成本莫名飙升,却查不到资源消耗源头;定时任务卡死、配置文件杂乱,终端命令零散难控。
2461 4
|
12月前
|
文字识别 自然语言处理 搜索推荐
Go语言实战案例-计算字符串编辑距离
编辑距离(Levenshtein Distance)是衡量两个字符串差异的经典方法,表示将一个字符串通过插入、删除或替换操作转换为另一个字符串所需的最少步骤。广泛应用于拼写纠错、模糊搜索、语音识别、OCR纠错及DNA序列比对等领域。常用动态规划求解,时间复杂度为O(m*n),空间可优化至O(n)。
|
Cloud Native 关系型数据库 Serverless
阿里云数据库获中国计算机学会“科技进步一等奖”!
阿里云数据库获中国计算机学会“科技进步一等奖”!
397 0
|
人工智能 自然语言处理 数据可视化
autoMate:无需视觉模型!用DeepSeek-V3/R1就能实现自动化操作电脑,支持任何可视化界面
autoMate是一款基于AI和RPA的本地自动化工具,通过自然语言实现复杂任务的自动化操作,支持本地部署,确保数据安全和隐私,适合需要高效处理重复性工作的用户。
1166 1
autoMate:无需视觉模型!用DeepSeek-V3/R1就能实现自动化操作电脑,支持任何可视化界面
|
人工智能 开发框架 小程序
工会成立100周年纪念,开发职工健身AI运动小程序、APP方案推荐
为庆祝中华全国总工会成立100周年,特推出基于AI技术的智能健身系统,以小程序和APP形式呈现,助力职工健康生活。方案包括:1) 小程序插件,支持多种运动识别,开箱即用;2) APP插件,提供更高精度的运动检测;3) 成熟的「AI乐运动」系统,支持赛事活动管理。这些方案满足不同需求,推动全民健身体验升级,彰显工会对职工健康的关怀。
|
人工智能 缓存 程序员
大模型文生图服务API设计原来如此简单(1)
文生图大模型的API设计其实很简单!无论是Midjourney这样的商业产品,还是ComfyUI这样的开源工具,它们的核心API设计都遵循着相似的简单原则。
631 1
|
弹性计算
阿里云服务器降级配置的方法
阿里云服务器支持按需升级配置和降级配置
3293 0
|
监控 安全 网络协议

热门文章

最新文章