Leetcode 26. 删除有序数组中的重复项 java版。 java解决删除重复数组元素并输出长度

news2025/1/24 2:18:00

1. 官网链接:

. - 力扣(LeetCode)

2. 题目描述:

 

 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

判题标准:

               系统会用下面的代码来测试你的题解:

        int[] nums = [...]; // 输入数组
        int[] expectedNums = [...]; // 长度正确的期望答案

        int k = removeDuplicates(nums); // 调用

        assert k == expectedNums.length;
        for (int i = 0; i < k; i++) {
          assert nums[i] == expectedNums[i];
        }

               如果所有断言都通过,那么您的题解将被 通过

3. 我:

package com.nami.algorithm.study.array;

/**
 * 描述: 删除有序数组中的重复项
 *
 * @Author: lbc
 * @Date: 2024-03-05 8:00
 * @email: 594599620@qq.com
 * @Description: keep coding
 */
public class DelRepeatElementOfArray {

    /**
     * 思路: 首先想到的是冒泡算法
     * 两层循环。第二层判断是否相等,如果第一个就不相等就退出第二层循环
     * 相等就置空
     * 最终输出非空长度。。
     * 但是根据leetcode 的时间,空间复杂度要求, 肯定没过关! ==!
     * 此处只是输出下,怎么想的,
     * 这个问题的两个想法:
     * 如何高效比较并删除,删除后如何放值
     * 以下代码只是将上述两个行为分开了
     * 此方法并没有完成题目时间,空间复杂度要求!
     *
     * @param array
     */
    public static int removeRepeatNum(Integer[] array) {
        if (array.length == 1) {
            return 1;
        }
        if (array.length == 0) {
            return 0;
        }
        System.out.println("开始前长度:" + array.length);
        for (int i = 0; i < array.length; i++) {
            Integer first = array[i];
            if (first == null) {
                continue;
            }
            for (int j = i + 1; j < array.length; j++) {
                if (!first.equals(array[j])) {
                    break;
                }
                if (first.equals(array[j])) {
                    array[j] = null;
                }
            }
        }

        int size = 0;
        for (Integer integer : array) {
            if (integer == null) {
                continue;
            }
            size++;
        }

        int j = 0;
        // leetcode 原题是不让用新数组,或其他数据结构的。这只是第一次思路 先得出结果,再优化
        Integer[] newArray = new Integer[size];
        for (Integer integer : array) {
            if (integer != null) {
                newArray[j] = integer;
                j++;
            }
        }
        array = newArray;
        for (Integer integer : array) {
            System.out.print(integer + " ");
        }
        System.out.println();
        return size;
    }

    public static void main(String[] args) {
        Integer[] array = new Integer[]{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};
        Integer[] array2 = new Integer[]{1, 1, 3};
        Integer[] array3 = new Integer[]{1, 1, 3, 3, 4, 5, 5};

        System.out.println("删除后长度:" + removeRepeatNum(array));
    }


}

 


 

烧脑环节

 4.官方 双指针:

    注: 我发现很多题,都用到了双指针解决,比如二分,比如合并两个有序数组,合并两个有序链表!!!很妙的一个解决方式。interesting  --!

   a.解释:

               :两个字段p,q.   p我认为就是我上面的第一层循环,q第二层循环

   5. 双指针代码:       

package com.nami.algorithm.study.array;

/**
 * 描述:
 *
 * @Author: lbc
 * @Date: 2024-03-05 9:41
 * @email: 594599620@qq.com
 * @Description: keep coding
 */
public class DelRepeatParamOfArray {


    /**
     * 原版,还有一个加强版。没贴出来,可以自己去题解看下!
     *
     * @param nums
     * @return
     */
    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++;
        }

        for (int num : nums) {
            System.out.print(num + " ");
        }
        System.out.println();
        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};
        int[] array2 = new int[]{1, 1, 3};
        int[] array3 = new int[]{1, 1, 3, 3, 4, 5, 5};

        System.out.println("删除后长度:" + removeDuplicates(array));
    }


}

                         

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1495290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个数据库表格缺少自动增加的字段导致添加一条数据失败

一个数据库表格缺少自动增加的字段导致添加一条数据失败。最近要整理出一个cms网站源程序&#xff0c;因此新建了一个目录&#xff0c;将需要的文件复制到该目录。复制好以后&#xff0c;试用的时候发现添加留言失败。经过数小时的查找原因&#xff0c;最后找到原因&#xff0c…

修复通达OA 百度ueditor 文件上传漏动

前些日子&#xff0c;服务器阿里云监控报警&#xff0c;有文件木马文件&#xff0c;因为非常忙&#xff0c;就没及时处理&#xff0c;直接删除了木马文件了事。 谁知&#xff0c;这几天对方又上传了木马文件。好家伙&#xff0c;今天不花点时间修复下&#xff0c;你都传上瘾了…

苍穹外卖学习-----2024/03/04

1.公共字段填充 代码在这里

【python--读取csv文件统计店铺有关信息】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; python练习题 读取csv文件统计店铺有关信息 读取csv文件统计店铺有关信息 import csv import osdef get_…

L1-096 谁管谁叫爹分数

L1-096 谁管谁叫爹 分数 20 全屏浏览 切换布局 作者 陈越 单位 浙江大学 《咱俩谁管谁叫爹》是网上一首搞笑饶舌歌曲&#xff0c;来源于东北酒桌上的助兴游戏。现在我们把这个游戏的难度拔高一点&#xff0c;多耗一些智商。 不妨设游戏中的两个人为 A 和 B。游戏开始后&…

Android开发者值得深入思考的几个问题,腾讯T3大佬亲自教你

前言 众所周知&#xff0c;移动开发已经来到了后半场&#xff0c;为了能够在众多开发者中脱颖而出&#xff0c;我们需要对某一个领域有深入地研究与心得&#xff0c;对于Android开发者来说&#xff0c;目前&#xff0c;有几个好的细分领域值得我们去建立自己的技术壁垒&#x…

LLM 大模型框架 LangChain 可观测性最佳实践

LLM&#xff08;Large Language Model&#xff09;大模型的可观测性是指对模型内部运行过程的理解和监控能力。由于LLM大模型通常具有庞大的参数量和复杂的网络结构&#xff0c;因此对其内部状态和运行过程的理解和监控是一个重要的问题。 什么是 LangChain&#xff1f; Lang…

回溯算法02-组合总合III(Java)

2.组合总合III 题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 示例 1: 输入: k 3,…

simplex算法的代码实现

def pivot(N, B, A, b, c, v, l, e):N对应非基本元变量下标,B对应基本元变量下标,A对应非基本元在约束方程组中的系数相反数形成的矩阵,b对应约束条件中小于等于号右边的数值集合,c对应目标函数中变量系数形成的集合,v对应当前目标函数的取值,l对应转出变量下标在B中的位置&am…

nodejs版本管理工具nvm安装和环境变量配置

1、下载nvm.exe https://github.com/coreybutler/nvm-windows/releases2、安装 1.在D盘根目录新建一个dev文件夹&#xff0c;在dev里面再新建一个nodejs。 2.双击下载好的nvm.exe 修改文件路径&#xff0c;且路径中不能有中文 3.安装完成后在D:\dev\nvm打开settings.txt&…

C++写食堂菜品管理系统

说明:本博文来自CSDN-问答板块,题主提问。 需要:学校拟开发一套食堂菜品管理系统,以便对菜品和同学们的评价进行管理,其中包含如下信息: 商户:商户名称、柜面位置、电话…… 菜品:菜品编号、菜品名称、价格、所属商户…… 学生:注册账号、昵称、电话…… 食堂里的商户…

因果学习篇(2)-Causal Attention for Vision-Language Tasks(文献阅读)

Causal Attention for Vision-Language Tasks 引言 这篇论文是南洋理工大学和澳大利亚莫纳什大学联合发表自2021年的CVPR顶会上的一篇文献&#xff0c;在当前流行的注意力机制中增加了因果推理算法&#xff0c;提出了一种新的注意力机制&#xff1a;因果注意力(CATT)&#xff…

【四】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题

数据库学生选择1122 数据库展示 course表展示 SC表展示 student表展示 数据库学生选课1122_3 第十一题 第十二题 第十三题 第十四题 第十五题 数据库学生选课1122_4 第十六题 第十七题 第十八题 第十九题 第二十题 数据库学生选课1122_5 第二十一题 第二十二题 结尾 最后&…

Snap7 PLC使用

文章目录 前言一、Snap7是什么&#xff1f;1. 官网下载2.下载后找到关键lib和.h文件 二、使用步骤1.新建一个Qt的工程2.读入数据 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&…

JavaSE(上)-Day1

JavaSE&#xff08;上&#xff09;-Day1 CMD终端的常见命令配置环境变量的作用?高级记事本安装&#xff08;略&#xff0c;正版收费&#xff09;各个语言的运行方式区别为什么Java可以实现跨平台?JDK和JRE的认识JDK是什么&#xff1f;由什么组成JRE是什么&#xff1f;由什么组…

《Balanced Meta-Softmax for Long-Tailed Visual Recognition》阅读笔记

论文标题 《Balanced Meta-Softmax for Long-Tailed Visual Recognition》 用于长尾视觉识别的平衡元-Softmax 作者 Jiawei Ren、Cunjun Yu、Shunan Sheng、Xiao Ma、Haiyu Zhao、Shuai Yi 和 Hongsheng Li 商汤科技、南洋理工大学、新加坡国立大学和香港中文大学多媒体实…

[ 云计算 | AWS ] ChatGPT 竞争对手 Claude 3 上线亚马逊云,实测表现超预期

文章目录 一、前言二、Claude 3 介绍以及相关测试细节三、在亚马逊云科技上体验 Claude 33.1 在 Amazon Bedrock 服务中配置 Claude 33.2 为聊天配置使用 Claude 3 模型3.3 Caude 3 Sonet 聊天体验 四、文末总结五、参考文献 一、前言 3月4号&#xff0c;Anthropic 发布了号称…

jmeter请求接口问题小记

将请求链接复制下来&#xff0c;然后将其放在http的请求中&#xff0c;可以有两种写法&#xff0c;详见附件

Python算法100例-3.6 自守数

1.问题描述2.问题分析3.算法设计4.求给定数的位数5.分离给定数中的最后几位6.确定程序框架7.完整的程序 1&#xff0e;问题描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如&#xff0c; 5 2 25 &#xff0c; 2 5 2 625 &#xff0c; 7 6 2 5776 &#xff0c…