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

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));
    }


}

                         

        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript实现将输入框内容放大的效果

问题描述&#xff1a;利用DOM所学知识&#xff0c;实现在输入框内输入内容时&#xff0c;在输入框上方显示一个将文字放大的框&#xff0c;在不输入内容时&#xff0c;这个框是被隐藏的。 关键代码&#xff1a; <!DOCTYPE html> <html lang"en"><he…

第三篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas股票市场数据分析

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas进行股票市场数据分析常见步骤和示例代码1. 加载数据2. 数据清洗和准备3. 分析股票价格和交易量4. 财务数据分析 二、扩展思路介绍1. 技术指标分析2. 波动性分析3. 相关性分析4.…

用docker部署后端项目

一、搭建局域网 1.1、介绍前后端项目搭建 需要4台服务器&#xff0c;在同一个局域网中 1.2、操作 # 搭建net-ry局域网&#xff0c;用于部署若依项目 net-ry&#xff1a;名字 docker network create net-ry --subnet172.68.0.0/16 --gateway172.68.0.1#查看 docker network ls…

MySQL--优化(SQL语句执行慢,如何分析)

MySQL–优化&#xff08;SQL语句执行慢&#xff0c;如何分析&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 一、如何分析 聚合查询&#xff1a; 对于涉及大量数据的聚合操作&#xff0c;如果可能的…

边缘计算网关在机床生产中的应用-天拓四方

随着工业4.0的推进&#xff0c;物联网&#xff08;IoT&#xff09;技术在各个工业领域中的应用日益广泛。特别是在机床行业&#xff0c;物联网技术的引入不仅提高了生产效率&#xff0c;还实现了对机床设备的实时监控和远程维护。在这一背景下&#xff0c;边缘计算网关的角色愈…

苹果因在iOS音乐流媒体市场上的反向引导行为,在欧盟被罚款18.4亿欧元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

对接华泰极速行情丨DolphinDB INSIGHT 插件使用教程

INSIGHT 是华泰证券依托大数据存储、实时分析等领域的技术积累&#xff0c;整合接入国内多家交易所高频行情数据&#xff0c;为投资者提供集行情接入、推送、回测、计算及分析等功能于一体的行情数据服务解决方案。基于 INSIGHT 官方提供的行情数据服务 C SDK&#xff08;TCP 版…

【对比】Gemini:听说GPT-4你小子挺厉害

前言 &#x1f34a;缘由 谷歌连放大招:Gemini Pro支持中文,Bard学会画画 &#x1f3c0;事情起因&#xff1a; 一心只读圣贤书的狗哥&#xff0c;不经意间被新闻吸引。【谷歌最新人工智能模型Gemini Pro已在欧洲上市 将与ChatGPT竞争】&#xff0c; 平时玩弄ChatGPT-4很熟练了…

[c/c++] 结构体对齐

在 c 语言中&#xff0c;结构体的大小并不是结构体每个成员的大小之和&#xff0c;结构体的大小往往比结构体的成员大小之和要大。如下结构体&#xff0c;每个成员的大小分别是 1、4、1&#xff0c;但是结构体的大小却不是 6&#xff0c;而是 8。 struct Test { char a; int b;…

怎么将pom在文件放到src下方

今天在IDEA从git拉取项目的时候&#xff0c;发现pom.xml文件在文件夹src的上方&#xff0c;平时看惯了项目的pom.xml文件在文件夹src的下方&#xff0c;应该怎么去设置呢&#xff1f; 点击设置——>点击Folder Always on Top 即可 参考&#xff1a;http://t.csdnimg.cn/s34…

淘宝买家卖家ERP API(添加购物车、上下架商品、订单)

custom-自定义API操作 taobao.custom 调用地址 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_se…

【JavaEE进阶】部署Web项目到Linux服务器

文章目录 &#x1f343;前言&#x1f340;什么是部署&#x1f332;环境配置&#x1f6a9;数据准备&#x1f6a9;程序配置⽂件修改 &#x1f384;构建项目并打包&#x1f38b;上传Jar包到服务器,并运行&#x1f6a9;上传Jar包&#x1f6a9;运行程序&#x1f6a9;开放端口号 &…

HotFix原理学习 IL2CPP 学习

原文链接&#xff1a;Unity 游戏用XLua的HotFix实现热更原理揭秘-CSDN博客 本文通过对XLua的HoxFix使用原理的研究揭示出来这样的一套方法。这个方法的 第一步&#xff1a;通过对C#的类与函数设置Hotfix标签。来标识需要支持热更的类和函数。第二步&#xff1a;生成函数连接器…

2024年【焊工(初级)】考试题及焊工(初级)考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 焊工&#xff08;初级&#xff09;考试题是安全生产模拟考试一点通生成的&#xff0c;焊工&#xff08;初级&#xff09;证模拟考试题库是根据焊工&#xff08;初级&#xff09;最新版教材汇编出焊工&#xff08;初级…

XM外汇平台自行扣除客户账户资金,理由荒谬且无据!

小编在FX110网多年&#xff0c;也算是“见多识广”了&#xff0c;可虽说是见惯了平台的“骚操作”&#xff0c;但对于XM平台这一次的行径&#xff0c;还是挺震惊的&#xff0c;只能说平台方多少有点无赖了&#xff01; 事故源于一位XM用户的一次出金&#xff0c;发现莫名其妙被…

LeetCode每日一题之 复写0

目录 题目介绍&#xff1a; 算法原理&#xff1a; 特殊位置处理&#xff1a; 代码实现&#xff1a; 题目介绍&#xff1a; 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a; 这种对数组元素进行修改&#xff0c;移动的题目我们仍然可以…

LeetCode-02

225. 用队列实现栈 用两个队列实现栈的功能&#xff0c;思路如下&#xff1a; 往空队列中放新元素把非空队列中的元素依次放入刚才添加了新元素的队列&#xff0c;直到非空队列变为空队列 class MyStack(object):def __init__(self):self.queue1 []self.queue2 []def push(…

台式电脑电源各线的电压和电流输出和输出电流

台式电脑电源是电脑硬件的重要组成部分。 它为计算机的各个部件提供所需的电压和电流。 不同的硬件设备和组件有不同的电压和电流输出。 下面详细介绍台式电脑电源各线的电压&#xff0c;包括3.3V、5V、12V、-12V、-5V和5VSB&#xff0c;以及它们的输出电流和用途。 3.3V&#…

命名实体识别NER(综合代码示例)

一、命名实体识别发展方向 二、中文数据集 CCKS2017开放的中文的电子病例测评相关的数据。 评测任务一&#xff1a;https://biendata.com/competition/CCKS2017_1/ 评测任务二&#xff1a;https://biendata.com/competition/CCKS2017_2/ CCKS2018开放的音乐领域的实体识别任务…

大唐杯学习笔记:Day4

1.1NR帧结构 5G NR中,依然采用一帧10ms,并将一帧分为10子帧,每个子帧为1ms。每个子帧包含几个时隙(slot),每个时隙由14个OFDM符号构成(在常规CP下)。 μ \mu μ Δ f 2 μ ∗ 15 [ K H Z ] \Delta f2^{\mu}*15[KHZ] Δf2μ∗15[KHZ]Cyclic prefix015Normal130Normal260Normal…