首页 > 编程语言 >JAVA学习-练习试用Java实现“删除有序数组中的重复项”

JAVA学习-练习试用Java实现“删除有序数组中的重复项”

时间:2024-09-07 10:52:39浏览次数:11  
标签:JAVA nums int 元素 ++ 试用 数组 长度 Java

问题:


给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);
// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

示例 1:

输入:nums = [1,1,2]

输出:2, nums = [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]

解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
提示:

0 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums 已按升序排列

解答思路:

以下是使用 Java 实现删除有序数组中重复项的代码:

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

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

        return i + 1;
    }

    public static void main(String[] args) {
        int[] nums = {1, 1, 2};
        int newLength = removeDuplicates(nums);

        System.out.println("新长度: " + newLength);
        for (int i = 0; i < newLength; i++) {
            System.out.print(nums[i] + " ");
        }
    }
}

这段代码使用双指针的方法来解决问题。一个指针 'i' 用于遍历数组,另一个指针 'j' 用于寻找下一个不重复的元素。当 'nums[j]' 与 'nums[i]' 不同时,将 'nums[j]' 赋值给 'nums[i + 1]',并将 'i' 向前移动一位。最后,返回 'i + 1' 作为新的数组长度。

在 'main' 方法中,我们可以对示例数组进行测试,并打印出删除重复项后的新长度和新数组。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

标签:JAVA,nums,int,元素,++,试用,数组,长度,Java
From: https://blog.csdn.net/weixin_69763181/article/details/141987770

相关文章

  • java计算机毕业设计考研信息管理(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,教育领域正经历着前所未有的变革。传统的信息管理方式已难以满足当前高校对高效、精准、个性化信息服务的迫切需求。特别是在......
  • java计算机毕业设计每日一课微党课学习管理平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,党员教育工作面临着新的机遇与挑战。传统的党员学习模式往往受限于时间、空间及资源,难以适应新时代党员教育高效化、个性化的......
  • java计算机毕业设计姜太公渔具销售系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化浪潮的推动下,传统渔具销售行业正经历着前所未有的变革。随着消费者购物习惯向线上迁移,以及个性化、高效化服务需求的日益增长,传统渔具店铺面......
  • JAVA线程池监控以及动态调整线程池
    1背景Java线程池源码分析 里虽然介绍了线程池的核心配置(核心线程数、最大线程数和队列大小)该如何配置,但是实际上业界也没有一个统一的标准。虽然有些所谓的"公式",但是不同的业务场景复杂多变,配置原则也不尽相同。从实际经验来看,IO密集型、CPU密集型应用在线程配置上就比较悬殊,因......
  • 基于ssm+vue电商直播订单管理系统(开题报告+程序+论文+java)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务行业迎来了前所未有的繁荣。近年来,电商直播作为一种新兴的购物模式,凭借其直观性、互动性和即时性,迅速成为电商领域......
  • 【Java基础】程序填空题
    这个系列主要是对历年的考试题目中容易模糊的点进行汇总,其中很多内容也附带的了解析。这个系列的所有内容应该是全网最详细的内容了,希望可以帮助大家考试顺利。2024-042023-102023-042022-102022-042021-102021-042020-102020-082019-102019-04求三连!!感谢~~......
  • 计算机毕业设计必看必学!! 10192 springboot巡更系统,原创定制程序, java、PHP、python
    摘 要目前,在日常生活中随处可见社区巡更人员对特定的区域进行定期或者不定期的安全巡查管理。包括勤前训示、必到点签到、巡更路线等,各项勤务工作均由巡更员本人在执勤日志本中手工填写,且工作点分散,不利于统一监管,存在信息化手段不足,勤务信息获取、输入复杂,监管信息不能......
  • java计算机毕业设计旅游服务管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,旅游市场的竞争日益激烈,旅游服务管理面临着前所未有的挑战与机遇。传统的人工管理模式已难以满足旅游企业高效、精准、个性化的......
  • 计算机毕业设计必看必学!! 09446 Springboot基于小程序的校园招聘系统的设计与实现,原
    摘 要随着智能手机的普及和4G网络的发展,以O20为代表的互联网+服务模式从衣食住行等方方面面改变着我们的生活方式。基于小程序的校园招聘系统主要功能模块包括用户管理,招聘资讯、招聘职位、简历投递、面试邀请等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的......
  • 计算机毕业设计必看必学!! 09259 ssm网上评教系统,原创定制程序, java、PHP、python、
    ssm网上评教系统摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设网上评教系统。本设计主要实现集人性化、高效率、便捷等优点于......