LeetCode初级算法——数组: 删除排序数组中的重复项

2023-11-03

解法一:暴力解法
创建一个动态数组list,用contains()方法提取、保存不重复的数字
再将动态数组list的数据取出赋给nums数组,返回list的长度

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length == 0) return 0;
        List<Integer> list = new ArrayList<>();
        for(int n : nums) {
            if(!list.contains(n))
            list.add(n);
        }
        for (int i = 0; i < list.size(); i++) {
            nums[i] = list.get(i);
        }
        return list.size();
    }
}

解法二:双指针解法
首先注意数组是有序的,那么重复的元素一定会相邻。
考虑用 2 个指针,一个在前记作 pre指向nums[0],一个在后记作 curr指向nums[1]。
算法流程如下:
1.比较 pre 和 curr 位置的元素值是否相等。
如果相等,curr 后移 1 位
2.如果不相等,将 curr 位置的元素复制到 pre+1 位置上,pre 后移一位,curr 后移 1 位
重复上述过程,直到 curr 等于数组长度。
3.返回 pre + 1,即为新数组长度。

PS:如果有数组如:nums[] = {1,2,3,4,5,6}
那么会造成相邻数据的重复赋值,而这个操作是没必要的
所以我们可以加一个小判断:if(curr - pre >1)
这样就避免了相邻数据的重复赋值
class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length == 0 || nums == null) return 0;
        int pre = 0;

        for(int curr = 1; curr < nums.length; curr++){
            if(nums[pre] != nums[curr]) {
                if(curr - pre >1)//避免相邻数据重复赋值
                    nums[pre + 1] = nums[curr];
                pre++;
            }
        }
        return pre + 1;
    }
}

执行结果:在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode初级算法——数组: 删除排序数组中的重复项 的相关文章

随机推荐

  • Linux命令——统计文件数量

    统计文件夹下文件的总个数 不包括文件夹 ls l grep wc l 统计文件夹下所有文件 包括子文件 的总个数 ls lR grep wc l 统计文件夹下所有文件夹的个数 包括子文件夹 ls LR grep d wc l 具体解释 ls
  • 【微软】数组里找任意两个数之和的绝对值最小值

    数组里找任意两个数之和的绝对值最小值 思路 有一个整数数组 请求出两两之差绝对值最小的值 记住 只要得出最小值即可 不需要求出是哪两个数 方法1 暴力的方式 遍历所有的两个数的差 记录最小值 算法的复杂度O n2 方法2 两个数要想差的绝对
  • Innodb的LRU列表解析

    Innodb为了加快对磁盘中数据的操作 在操作磁盘上的数据时 会先把数据存放到一块名为Buffer Pool的内存缓冲池中 缓冲池以页为单位进行缓存 页大小为16K 由于受到机器限制 内存的大小远小于磁盘的大小 因此需要一种机制来淘汰非热点
  • .NET框架结构体系及工作原理

    1 NET框架运行在操作系统之上 是 NET最基础的框架 它提供了创建 部署和运行 NET应用的环境 主要包含公共语言运行时 CLR 和框架类库 NET Framwork 类库 FCL 并且支持多种开发语言 NET框架可以安装在Window
  • ppt使用教程记录

    ctrl 快速缩小字体 ctrl 快速放大字体 ctrl b 加粗 ctrl u 下划线 ctrl i 斜体 ctrl e 居中对齐 ctrl l 左对齐 ctrl r 右对齐 alt n x h 快速插入文字 alt n p d 快速插入
  • 前端绑定事件总结

    前言 前端开发很多情况下都需要绑定事件 不同的事件对应不同的触发方式 不同需求下需要合适的事件 最近在开发中遇到了绑定事件的问题 所以总结一下前端绑定事件 事件 元素天生具备的行为方式 和写不写JS代码没有关系 onclick不是事件 cl
  • 1. 实现一个单链表,链表初始为空,支持三种操作:

    1 向链表头插入一个数 2 删除第 k 个插入的数后面的数 3 在第 k 个插入的数后插入一个数 include
  • MKL 进行矩阵向量运算

    C source code is found in dgemm example c define min x y x lt y x y include
  • 安卓逆向-反编译-修改-打包-签名-解决夜神模拟器usb调试找不到安卓apk的问题,无法进行动态调试的解决方案。

    问题来由 在进行了一定时间的安卓逆向的学习 遇到了一个问题如图 这么多个安卓apk 打开开发者模式 调试应用只有一个 这不是离谱 按照之前的文章 这就不能进行动态调试 既然有了问题就要想解决办法 问了带我的师傅 我不是用你这个方法的 给我演
  • 【Python】Pyqt5 主窗口调用子窗口demo

    背景 通过主窗口的按钮调用其对应的窗口 代码比较简单 直接看 不懂的欢迎留言 一共两个代码 ui first py 实现的是主窗口 ui second py 实现的是子窗口 点击开始按钮调用子窗口 点击关闭退出窗口 ui first py
  • C#方法,可空类型,数组,集合,ArrayList排序,List,Hashtable和Dictionary

    C 方法 方法的定义 public void int Compare int a int b Program program new Program Console WriteLine Compare a b 方法的递归 public vo
  • java 实现word转pdf,并且实现内容替换,乱码处理,去水印

    1 引入依赖 aspose words的包需要从官网下载
  • JavaScript 使用image-compressor压缩图片

    首先引入min js文件 引入 import ImageCompressor from assets js image compressor min 压缩 uploadImage 图片小于80KB 直接上传 大于80KB 压缩后上传 if
  • 使用Spring StateMachine框架实现状态机

    Spring StateMachine框架可能对于大部分使用Spring的开发者来说还比较生僻 该框架目前差不多也才刚满一岁多 它的主要功能是帮助开发者简化状态机的开发过程 让状态机结构更加层次化 前几天刚刚发布了它的第三个Release版
  • flex布局教程(来源:阮一峰)

    flex布局非常适合移动端项目 跟安卓端的线性布局很像 可参考 flex布局是通过给父元素添加flex属性 来控制子元素的位置和排序方式 一 Flex 布局是什么 Flex 是 Flexible Box 的缩写 意为 弹性布局 用来为盒状模
  • CanMV K210工程源码架构

    CanMV K210工程源码架构 关于CanMV github源码地址 https github com kendryte canmv CanMV 让 AIOT 更简单 CanMV 基于Sipeed MaixPy 但它与之不同 现在是一个完
  • Uipath 基础(简介、用户界面、键盘快捷键)

    一 简介 UiPath Studio是一个完整的应用程序集成解决方案 可自动化第三方应用程序 管理IT任务和业务IT流程 Studio中最重要的概念之一是自动化项目 项目是业务流程的图形表示 通过让您完全控制执行顺序以及自定义步骤集之间的关
  • C/C++基础讲解(一百二十八)之经典篇(时间函数举例四剑客)

    C C 基础讲解 一百二十八 之经典篇 时间函数举例四剑客 程序之美 前言 很多时候 特别是刚步入大学的学子们 对于刚刚开展的计算机课程基本上是一团迷雾 想要弄明白其中的奥秘 真的要花费一些功夫 我和大家一样都是这么啃过来的 从不知到知知
  • chrome浏览器的console中引入jquery的包用于ajax访问

    首先是 var scr document createElement script scr src https code jquery com jquery 2 2 0 min js document body appendChild sc
  • LeetCode初级算法——数组: 删除排序数组中的重复项

    解法一 暴力解法 创建一个动态数组list 用contains 方法提取 保存不重复的数字 再将动态数组list的数据取出赋给nums数组 返回list的长度 class Solution public int removeDuplicat