博客
关于我
Leetcode 26. 删除有序数组中的重复项 java版。 java解决删除重复数组元素并输出长度
阅读量:795 次
发布时间:2023-01-30

本文共 1297 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要删除一个非严格递增排列的数组中的重复元素,使得每个元素只出现一次,并保持原来的相对顺序。我们将使用双指针的方法来高效地完成这一任务。

方法思路

我们可以使用双指针的方法来处理这个问题,因为数组是有序的(非严格递增排列)这样可以在 O(n) 的时间复杂度和 O(1) 的空间复杂度下来解决问题。具体步骤如下:

  • 初始化两个指针 pq,分别指向数组的起始位置,p 始始为 0,q 为 1。
  • 遍历数组,使用 q 指针逐步移动。当遇到不同元素时,将 q 指针的元素移动到 p 指针的下一个位置,然后 p 移动。
  • 如果遇到重复的元素,仅将 q 移动多步,但 p 保持不变。
  • q 遍历完整个数组后,返回 p + 1,因为 p 最终指向的是最后一个被处理的元素。
  • 这种方法确保了元素的相对顺序保持不变,并且只需要一个遍历,时间复杂度为 O(n),空间复杂度为 O(n)。为了使代码更高效,我们可以直接在数组上修改元素位置。

    解决代码

    public class DelRepeatParamOfArray {    public static int removeDuplicates(int[] nums) {        if (nums == null || nums.length == 0) {            return 0;        }        int p = 0, q = 1;        while (q < nums.length) {            if (nums[p] != nums[q]) {                nums[p + 1] = nums[q];                p++;            }            q++;        }        return p + 1;    }    public static void main(String[] args) {        int[] array = new int[]{1, 1, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 100, 100, 102, 102, 102, 104, 105, 119, 119, 200, 300, 400, 500};        System.out.println("删除后长度:" + removeDuplicates(array));    }}

    代码解释

  • 移除重复元素:

    • 初始化指针 pq,分别指向数组的第一个元素的位置。
    • 开始遍历数组:当 q 指针遇到与 p 指针当前元素不同的值时,将该值移动到 p+1 位置,并将 p 移动到下一个位置。
    • 如果遇到相同的值,则仅将 q 指针移动到下一个位置,不改变 p
  • 返回结果:

    • 当遍历结束时,p 指针位于数组中最后一个被处理元素的位置,返回 p + 1 即可得到了唯一元素的数量。
  • 这种方法利用了数组的已排序特性,高效地减少了重复元素,保持了原有的相对顺序,并且代码简洁高效。

    转载地址:http://pagyk.baihongyu.com/

    你可能感兴趣的文章
    flask框架魔方教学网站毕设源码+论文
    查看>>
    Flatterer: 快速JSON转换工具使用指南
    查看>>
    Flex / PHP Security Basics - Part One
    查看>>
    FLEX 4 :选择本地文件编辑
    查看>>
    Flex 与 spring mvc 整合 BlazeDB
    查看>>
    java 重载、重写、重构的区别
    查看>>
    Java 链表对象 链表翻转 对象中有对象的翻转 对象链表翻转指针
    查看>>
    JAVA- 清除数组重复元素
    查看>>
    Java---设计模式app小软件汇总应用
    查看>>
    java-如何给表格添加分页
    查看>>
    Java-笔记12
    查看>>
    java-设计模式-装饰器设计模式,代理设计模式和继承三种扩展方法的比较
    查看>>
    java.io.tmpdir
    查看>>
    java.lang.IllegalStateException: Optional int parameter 'id' is not present but cannot be translated
    查看>>
    java农副产品购物app的设计与开发(ssm)
    查看>>
    JAVA分布式系统
    查看>>
    java分布式链路追踪;jvm应用监控-skywalking
    查看>>
    Java创建elasticsearch的model时,如何配置使用ik分词器?
    查看>>
    java加密解密
    查看>>
    Java反射
    查看>>