[LeetCode]删除排序数组中的重复项(Remove Duplicates from Sorted Array)

news/2024/6/25 13:16:07

题目描述

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例 1:

给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。

说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

解决方法

由于数组已经排序我们可以使用2个索引len,i进行去重,其中len用来复制,i用来检查是否重复。当nums[i-1] != nums[i]时,说明这时不重复,将其复制到nums[len]。

    public int removeDuplicates(int[] nums) {
        if (nums == null || nums.length == 0)
            return 0;

        int len = 1;

        for (int i = 1; i < nums.length; i++) {
            if (nums[i - 1] != nums[i])
                nums[len++] = nums[i];
        }


        return len;
    }

原文首发:https://lierabbit.cn/2018/09/...


http://www.niftyadmin.cn/n/3003993.html

相关文章

python内置属性_python进阶之py文件内置属性

前言 对于任何一个python文件来说&#xff0c;当python解释器运行一个py文件&#xff0c;会自动将一些内容加载到内置的属性中&#xff1b;一个模块我们可以看做是一个比类更大的对象。 查看模块的内置属性 我们先创建一个典型的py文件 # test.py # -*- coding: utf-8 -*- &quo…

golang 时间戳_使用 golang 内置模块实现网站TLS证书过期日期查询

由于前段时间出现过大公司域名证书未及时更新导致服务中断&#xff0c;之前也有了解过 golang。闲来无事&#xff0c;于是用了半天的时间&#xff0c;通过 golang 官网文档&#xff0c;写了一个小工具&#xff0c;来获取域名证书的到期时间。证书信息通过传参 -d 域名 来获取本…

雨林木风系统封装工具封装xp_U盘安装最新版WIN10系统

今天终于搞定了U盘安装最新版Win10系统。由于我的DELL笔记本是UEFI引导&#xff0c;U盘烧镜像文件时&#xff0c;需格式化为FAT32格式(NTFS格式不能引导)。最新版Win10(2019年12月版)镜像中有一个install.wim的文件大小为4.11GB&#xff0c;而FAT32格式的U盘不能写入超过4GB的单…

sift源码_SLAM论文和源码解读-写在前面

这个专栏第一大部分主要是slam方面的论文和源码解读&#xff0c;从技术领域可分为激光slam和视觉slam&#xff0c;同时视觉slam中语义slam已经成为一个重要的分支&#xff0c;所以我们把它单独提出来作为一部分。激光slam虽然也有很多结合语义的&#xff0c;但是它在方法上和论…

微信小程序[登录流程以及无感刷新流程]

网上找到两篇比较优秀的内容文章&#xff0c;因此就不做探究了 参考文章&#xff1a; 1.https://blog.csdn.net/weixin_34237596/article/details/88685505 2.https://blog.csdn.net/dwb123456123456/article/details/84251932

springMVC之@InitBinder与 @ModelAttribute的用法

转载自&#xff1a; https://blog.csdn.net/wang0907/article/details/108357696 简言之InitBinder就是应用到所有RequestMapping注解方法&#xff0c;在其执行之前初始化数据绑定器。 ModelAttribute就是给当前controller类下的所有请求方法添加数据。 ControllerAdvice pub…

python创建类实例方法_Python 如何通过类方法创建实例方法?

下面是 Python 3.x language reference 中的一段话&#xff0c;大意是理解的&#xff0c;不过写不出一个这样的示例&#xff0c;求大神给个与这段话一致的示例&#xff1a;When an instance method object is derived from a class method object, the “class instance” stor…

JVM虚拟机(二):堆、栈、方法区概念区别

Java 堆 Java堆是和Java应用程序关系最密切的内存空间&#xff0c;几乎所有的对象都放在其中&#xff0c;并且Java堆完全是自动化管理&#xff0c;通过垃圾收集机制&#xff0c;垃圾对象会自动清理&#xff0c;不需自己去释放。 根据垃圾回收机制的不同&#xff0c;Java堆有可能…