首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 26:删除有序数组中的重复项

LeetCode 26:删除有序数组中的重复项

作者头像
五分钟学算法
发布于 2023-01-10 00:59:28
发布于 2023-01-10 00:59:28
3.9K00
代码可运行
举报
文章被收录于专栏:五分钟学算法五分钟学算法
运行总次数:0
代码可运行

一、题目描述

给你两个有序整数数组 nums1nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

初始化 nums1nums2 的元素数量分别为 m 和 n 。

你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

二、题目解析

设置两个索引 ij 分别指向 nums1 和 nums2 的有效元素的尾部,从它们的尾部开始向前遍历。

同时设置索引 cur 指向 nums1 的最末尾。

在每次遍历过程中,比较 ij 指向的元素值大小,把大的元素填充到 cur 的位置,填充完毕说明那个元素已经放置在它应该放置的位置,不需要在管它了,把 cur 向前移动,同时把 i 或者 j 向前移动。

继续比较 ij 指向的元素值大小,把大的元素填充到 cur 的位置。

三、参考代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // 索引从有序数组 nums1 有效元素的末端开始
        // 数组的下标索引从零开始计数
        // 索引   0    1     2
        // 数组 [ 1 ,  2  ,  3 ]
        int i = m - 1;

        // 索引从有序数组 nums2 的末端开始
        int j = n - 1;

        // 从有序数组 nums1 最末端的位置开始保存元素
        int cur = nums1.length - 1;

        // 通过循环把 num2 的元素都移动到 num1 中
        while( j >= 0  ){

            // 比较 num1 和 num2 中当前的元素大小

            // 如果 num1 中的索引位置为 i 的元素大于 num2 中索引位置为 j 的元素
            // 为了防止越界 i 必须是大于等于 0 
            if( i >=0 && nums1[i] > nums2[j] ){

             // 把 num1 中的索引位置为 i 的元素复制到索引为 cur 的位置
             // 此时 cur 的元素已经确定下来
             nums1[cur] = nums1[i];
            
             // 接下来去确定 cur 前面一个元素应该放什么数字
             cur--;
             // 此时,索引 i 需要向前移动
             i--;
             // 否则,如果 num1 中的索引位置为 i 的元素小于或者等于 num2 中索引位置为 j 的元素
            }else{
             
             // 把 num2 中的索引位置为 j 的元素复制到索引为 cur 的位置
             nums1[cur] = nums2[j];
             // 接下来去确定 cur 前面一个元素应该放什么数字
             cur--;
             // 此时,索引 j 需要向前移动
             j--;
            }
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 五分钟学算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Leetcode#88. Merge Sorted Array(合并两个有序数组)
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
武培轩
2018/09/28
4770
《三战Leetcode》寻找有序数组的中位数
  大家好,又到了三分钟算法修行时间,之前挑选的算法都是中低难度的,这次找个难度较高的,看看会遇到啥问题。至于难到啥程度,来看看Leetcode下解题的网友评论。
IT学习日记
2022/09/13
3400
《三战Leetcode》寻找有序数组的中位数
画解算法:88. 合并两个有序数组
https://leetcode-cn.com/problems/merge-sorted-array/
灵魂画师牧码
2019/07/11
4430
画解算法:88. 合并两个有序数组
leetcode刷题(32)——88. 合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
老马的编程之旅
2022/06/22
1930
LeetCode 图解 | 88. 合并两个有序数组
题目来源于 LeetCode 上第 88 号问题:合并两个有序数组。题目难度为 Easy。
五分钟学算法
2020/05/19
7920
LeetCode 图解 | 88.  合并两个有序数组
[leetcode数组系列]6 合并两有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
我是程序员小贱
2020/06/05
6760
每天一道leetcode88-合并两个有序数组
题目 每天一道leetcode88-合并两个有序数组 分类:链表 中文链接: https://leetcode-cn.com/problems/merge-sorted-array/ 英文链接 https://leetcode.com/problems/merge-sorted-array/ 题目详述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
乔戈里
2019/09/17
3970
LeetCode 88. 合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
Michael阿明
2022/11/26
2920
LeetCode 88. 合并两个有序数组
【LeetCode12】合并两个有序数组
我发现最近做的题目都可以用双指针算法来解决,这道题也一样,我们定义两个指针p1和p2,分别从数组1指定位置(由m决定)和数组2的尾端开始往前遍历。
Sam Gor
2019/07/08
7000
【LeetCode12】合并两个有序数组
leetcode-easy-array-合并两个有序数组
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
shengjk1
2020/09/01
2780
每日一练:删除有序数组中的重复项
在写这道题时候,一开始我是这么想的思路 (思路会比等会讲的第二种复杂,所以读者若不想听的话可以直接看第二种) :
利刃大大
2023/04/12
2720
每日一练:删除有序数组中的重复项
力扣题目汇总(存在重复,合并两个有序数组,搜索插入位置)
示例: ``` 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3
小小咸鱼YwY
2019/07/24
6310
【LeetCode】88. 合并两个有序数组 双指针
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
韩旭051
2020/06/23
2810
螺旋矩阵II与合并两个有序数组
昨天周五,没能按时发leetcode,说声抱歉,今天补上,每周的两次刷算法,必不可少,今日刷题两篇,分别是螺旋矩阵II与合并两个有序数组!
公众号guangcity
2019/09/20
3900
螺旋矩阵II与合并两个有序数组
力扣刷题之合并两个有序数组
首先一种暴力的解法 我们可以直接将两个数组合并,然后直接排序 从数组的有效位的后边开始直接将num2的数组元素赋值去过,然后这样两者合并后在利用数据排序的方法一起排序。底层原理是一种快速排序。
兰舟千帆
2022/08/03
2490
力扣刷题之合并两个有序数组
数组相关面试题--5.合并两个有序数组
绝活蛋炒饭
2024/12/16
1250
数组相关面试题--5.合并两个有序数组
☆打卡算法☆LeetCode 88、合并两个有序数组 算法解析
“给定两个递增数组和两个代表数组长度的整数,合并两个数组,返回合并后递增顺序的数组。”
恬静的小魔龙
2022/08/07
2570
☆打卡算法☆LeetCode 88、合并两个有序数组  算法解析
【leetcode系列】88.合并两个有序数组
这道题目其实和基本排序算法中的 merge sort非常像,但是 merge sort 很多时候,合并的时候我们通常是 新建一个数组,这样就很简单。但是这道题目要求的是 原地修改.
lucifer210
2019/08/16
3860
88 合并两个有序数组
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
木瓜煲鸡脚
2021/01/18
9850
88 合并两个有序数组
Leetcode No.4 寻找两个正序数组的中位数
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
week
2020/08/02
4200
相关推荐
Leetcode#88. Merge Sorted Array(合并两个有序数组)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档