leecode26题删除排序数组中的重复项

2023-10-31

双指针法的介绍

下面内容转载自代码随想录
点击进入代码随想录
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

定义快慢指针

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置

很多同学这道题目做的很懵,就是不理解 快慢指针究竟都是什么含义,所以一定要明确含义,后面的思路就更容易理解了。

删除过程如下:
image.png

代码版本

第一次错误

//这种解法,错误在这个只考虑到有不等存在的情况,如果所有的元素都相等的话,这里会出现错误
//暴力方法很多时候的确能够解决问题,但是暴力方法我用的时候总是感觉只把这个逻辑写了出来,并没有考虑到所有的情况

    public static int removeDuplicates(int[] nums) {
        int count=0;
        int length = nums.length;
        if(length==1){
            return 1;
        }
        for (int i = 0; i < length-1; i++) {
            if(nums[i]!=nums[i+1]){
                nums[count]=nums[i];
                count++;
            }
        }
        if(nums[length-1]!=nums[length-2]){
            nums[count]=nums[length-1];
            count++;
        }
        return count;
    }
}

第二次成功

相比第一次改变了 循环条件,使其能够适用于所有的情况,不需要在考虑到数组的越界等问题.相比这第一次改进了好多,但是还是要考虑这个特殊情况1的时候,这个代码的通用性仍然不是太强

package 数组;

import java.util.Scanner;

public class 删除排序数组中的重复项26 {
    public static void main(String[] args) {
        int n;
        Scanner input = new Scanner(System.in);
        System.out.println("请输入数组的长度");
        n=input.nextInt();
        int[] num = new int[n];
        System.out.println("按照递增的顺序输入数组的元素");
        for (int i = 0; i < num.length; i++) {
            num[i]= input.nextInt();
        }
        int index=removeDuplicates(num);
        System.out.println(index);
        for (int i = 0; i < index; i++) {
            System.out.println(num[i]);
        }
    }
    public static int removeDuplicates(int[] nums) {
        int count=0;
        int length = nums.length;
        if(length==1){
            return 1;
        }
        int index =nums[0];  //修改代码
        nums[count]=nums[0];
        count++;
        for (int i = 1; i < length; i++) {
            if(nums[i]!=index){
                nums[count]=nums[i];
                index=nums[i];
                count++;
            }
        }
        return count;
    }
}

优化代码

我在想能不能够把这个特殊情况给考虑进入循环,而不是让他在这里占据几行代码

    public static int removeDuplicates(int[] nums) {
        int count=0;
        int length = nums.length;
        int index = 100000;  //根据取值范围赋值一个取不到的值
        for (int i = 0; i < length; i++) {
            if(nums[i]!=index){
                nums[count]=nums[i];
                index=nums[i];
                count++;
            }
        }
        return count;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leecode26题删除排序数组中的重复项 的相关文章

随机推荐

  • 【网络】记一次重启网卡之后网络故障原因排查

    一 事件背景 远程通过ssh连接服务器后 执行命令 nmcli con modify ens33 ipv4 dns 8 8 8 8 为ens33网卡添加dns 然后执行命令 nmcli c up ens33 命令重新激活网卡 此时远程网络连
  • 推荐系统遇上深度学习(十一)--神经协同过滤NCF原理及实战

    原创 文文 小小挖掘机 2018 06 02 笔者是一个痴迷于挖掘数据中的价值的学习人 希望在平日的工作学习中 挖掘数据的价值 找寻数据的秘密 笔者认为 数据的价值不仅仅只体现在企业中 个人也可以体会到数据的魅力 用技术力量探索行为密码 让
  • 【Python】 将数据写入 csv 文件中并读取

    将数据存放到csv文件中 默认newline参数的值为 n 在writerow输出一行换行后 还会再次换行 就会导致两条数据之间存在空行的问题 将newline设置为空就可以解决这个文件 import csv 加载csv库 csvfile
  • rhel7 初始化mysql 5.7 root密码

    mysql 5 6版本后已经不提供默认root密码登录了 如果想在5 6版本之后修改mysql root用户密码可参考如下步骤 5 7 11 版本官方下载地址 http dev mysql com downloads mysql 解压后rp
  • 2023前端面试题合集(附答案)持续更新中...

    2023前端面试合集 js基础类 1 什么是原型链及原型链存在的意义 2 什么是作用域 3 什么是闭包 4 浏览器的渲染过程 5 数据类型简介 6 深浅拷贝 7 css水平居中的几种方法 8 你知道数组有哪些实用高阶函数吗 9 call a
  • python使用pywinauto实现桌面APP自动化测试

    准备 1 安装python 安装版本为2 7 14 并将python添加至系统变量 2 安装pywinauto 进入python安装目录 进入Scripts目录下 shift 右键 点击在此处打开命令窗口 输入命令 pip install
  • ai图像识别python的项目_利用ImageAI库只需几行python代码实现目标检测

    什么是目标检测 目标检测关注图像中特定的物体目标 需要同时解决解决定位 localization 识别 Recognition 相比分类 检测给出的是对图片前景和背景的理解 我们需要从背景中分离出感兴趣的目标 并确定这一目标的描述 类别和位
  • JavaScript 浏览器点击复制功能(CopyToClipboard)

    尝试了JS下两种复制到剪贴板的功能 div div
  • mysql的备份和恢复

    mysql的备份和恢复 备份数据库文件 1 停止mysql服务 备份数据库目录中指定数据库 如 cp r var lib mysql bw home backup 2 恢复数据库 将备份文件拷回至数据库目录 var lib mysql 并且
  • 程序员应知应会之——结构体字节对齐 填充与打包

    文章目录 Hello World 数据对齐 结构体的数据填充 输出分析 structure A structure B structure C 结构体也有对齐要求 structure D 如何减少填充 什么是结构体packing 指针 Mi
  • 国际版阿里云/腾讯云免卡开户:阿里云GPU服务器教程

    阿里云GPU服务器教程 阿里云GPU服务器为深度学习和大规模数据处理提供了高效的核算渠道 本文将介绍怎么注册和运用阿里云GPU服务器 1 注册GPU服务器 首先 登录阿里云官网并进入控制台 挑选 ECS 服务 在ECS页面 点击 实例 选项
  • elasticsearch批量修改,批量更新某个字段

    1 源生API 在这里没有用官方提供的bulk API 而是用的另外一种方式 POST infomations infomations update by query JSON请求格式 query match status UP SHELF
  • Android项目实战系列—基于博学谷(七)课程模块(上)

    由于这个模块内容较多 分为上 中 下 三篇博客分别来讲述 请耐心阅读 课程模块分为四个部分 课程列表 课程详情 视频播放 播放记录 课程模块 上 主要讲述课程列表部分 一 水平滑动广告栏界面 1 创建水平滑动广告栏界面 在res layou
  • 友情链接检查工具

    友链检测工具 它是一款 完全免费 的软件 用以检测友情链接没有掉链 与网页版对比 具有 多线程检测 实时检测 速度快 高效 操作 步骤 输入网址 点击查询按钮 等待完成返回查询结果 友链检测工具 zip
  • python简单的学习方式04

    python学习 一 嵌套循坏 二 break和continue关键字 三 for else和while else 四 列表的性质 五 列表的增删查改 1 增加 2 修改 3 删除 一 嵌套循坏 引入模块 作用 直接借用别人实现好的功能来解
  • 实例化和初始化的区别

    实例化一般是由类创建的对象 在构造一个实例的时候需要在内存中开辟空间 即 Student s new Student 初始化 实例化的基础上 并且对 对象中的值进行赋一下初始值
  • 面试题--Git与设计模式

    面试题 Git与设计模式 Git 1 Git和SVN有什么区别 2 什么是Git 3 在 Git 中提交的命令是什么 4 什么是 Git 中的 裸存储库 5 Git 是用什么语言编写的 6 在Git中 你如何还原已经 push 并公开的提交
  • WSL启动Ubuntu时报错“参考的对象类型不支持尝试的操作”

    最近要用到微软的WSL了 打开以后发现hyper v之前因为用virtual box虚拟机给关了 导致报错 打开相关的虚拟化功能以后 又遇到了新的问题 参考的对象类型不支持尝试的操作 电脑系统 WIN11 我会给大家介绍三种方法 打游戏的朋
  • 队列的使用注意点

    队列通常使用链表或数组作为元素的基础存储 队列的大小需要约束 如果允许内存中的队列不受限制 那么对于许多类别的问题 它可以不受限制地增长 直到它达到灾难性失败的地步 因为它耗尽了内存 这发生在生产者超过消费者的时候 无界队列在系统中可能很有
  • leecode26题删除排序数组中的重复项

    双指针法的介绍 下面内容转载自代码随想录 点击进入代码随想录 双指针法 快慢指针法 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作 定义快慢指针 快指针 寻找新数组的元素 新数组就是不含有目标元素的数组 慢指针 指向更新