(java)剑锋Offer(找出数组中任意一个重复的数字不改变原有数组)题目二

Java统计数组中相同元素个数 写的Java文件中实现了统计数组中相同元素个数的功能以及统计数组中小于某个元素的所有元素的数量功能,非常的实用。 立即下载

分析:题目一与题目二的区别:题目一没有规定不修改数组,题目一数组中值得范围在0-n-1;考虑题目一中的三种方法,只有方法二没有改变原有数组,所以方法二放到题目二同样的适用;但是我们可以把HashMap替换成数组实现。可以想想为什么题目一不适合使用题目中的方法一,题目二中的方法一与题目一中的方法二思路是一样的。

以下为题目二的解法:

 方法一:遍历数组,我们将数组(oldArray)中的值放入另外一个下标等于这个值的数组(tempArray)中,放入的前提是这个数组(tempArray)的此位置的值不等于即将放人的值,如果等于就说明我们找到数组中任意一个重复的数字;

题目一为啥不能使用数组呢?定义一个数组时,如果你不给数组进行赋值,那么数组中的值默认为0;

方法二:如果数组满足题目要求,那么就一定会存在重复的数字。采用二分查找的思想,将数组对半,如果前面一半的个数多于他应该含有数字个数,那么重复的数字肯定在这一部分。否则在另外一部分。如此反复下去就能找到重复的那个数字。

二分查找思想分析图(对照代码):

代码实现如下:

package com.example.offer;

/**
 * 在一个长度为n+1的数组里的所有数字都在1-n的范围内,所以数组中至少有一个数字是重复的
 * 请找出数组中任意一个重复的数字,但是不能改变输入的数组。
 */
public class DuplicateTest02 {

    public static void main(String[] args) {
        int[] array=new int[]{2,3,5,4,3,2,6,7};
        //int[] array=new int[]{0,3,5,4,3,2,6,7};
        //int[] array=null;
        //int[] array=new int[]{};

        int result=duplicateNum02(array);
        if(result!=-1){
            System.out.println("查找到的任意重复的数为"+result);
        }
    }

    /**
     * 第一种方法:借助另外一个相同大小的数组进行处理
     * @param array
     * @return
     */
    public static int duplicateNum(int[] array){
        //避免空指针
        if(array==null || array.length<=0){
            throw new NullPointerException("您输入的数组为空");
        }
        //避免输入的数组元素不符合要求
        for (int i = 0; i < array.length; i++) {
            if(array[i]<=0 || array[i]>array.length-1){
                throw new IllegalArgumentException("您输入的数组不符合要求");
            }
        }
        int[] tempArr=new int[array.length];
        //循环遍历数组
        for (int i = 0; i < array.length; i++) {
            if(array[i]==tempArr[array[i]]){
                return array[i];
            }else{
                tempArr[array[i]]=array[i];
            }
        }
        return -1;
    }

    /**
     * 第二种方法:如果数组符合题目要求
     * 那么数组中必定会存在重复的数,使用二分查找的思想
     * @param array
     * @return
     */
    public static int duplicateNum02(int[] array){
        //避免空指针
        if(array==null || array.length<=0){
            throw new NullPointerException("您输入的数组为空");
        }
        //避免输入的数组元素不符合要求
        for (int i = 0; i < array.length; i++) {
            if(array[i]<=0 || array[i]>array.length-1){
                throw new IllegalArgumentException("您输入的数组不符合要求");
            }
        }
        int start=1;
        int end=array.length-1;
        while(start<=end){
            int middle=((end-start)>>1)+start;
            int count=countRange(array,start,middle);
            if(end==start){
                if(count>1){
                    return start;
                }else{
                    break;
                }
            }
            if(count>(middle-start+1)){
                end=middle;
            }else{
                start=middle+1;
            }
        }

        return -1;
    }

    /**
     * 判断数组中的数值在指定区间的个数
     * @param array
     * @param start
     * @param end
     * @return
     */
    private static int countRange(int[] array, int start, int end) {
        //判空处理
        if(array==null){
            return 0;
        }
        int count=0;
        for (int i = 0; i < array.length; i++) {
            if(array[i]>=start && array[i]<=end){
                count++;
            }
        }
        return count;
    }
}

代码反思:第一种:时间复杂度为O(n),空间复杂度为O(n)。第二种:数组长度为n,调用countRange() O(logn)次,每次需要O)(n)时间,所以时间复杂度为O(nlogn),空间复杂度为O(10)。

Java如何找出数组中重复的数字 主要为大家详细介绍了Java如何找出数组中重复的数字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 立即下载

相关推荐

图像调整亮度饱和度 c语言,【C#/WPF】调节图像的HSL(色相、饱和度、明亮度)...

先说概念:HSL是一种描述颜色的方式(其他颜色描述方式还有大家熟悉的RGB值)。HSL三个字母分别表示图像的Hue色相、Saturation饱和度、Lightness明亮度。需求:制作一个面板,包含三个滑动条,拖动滑动条可以修改目标图片的HSL值。即模仿PS中类似的功能,如下图:方案一:遍历所有像素点,修改每个点的HSL值。前台界面:一个Image控件显示目标图片,一个Button按钮点击一下降低...

weixin_39935777的博客 1154

Java求数组中的重复数字

Java求数组中的重复数字的三种解题思路

qq_36507046的博客 3673

机械臂的运动学分析-工业机器人

机械臂的运动学是研究机械臂各连杆坐标系之间的运动关系,是对机械臂进行运动控制的基础。本章分析了所设计的六自由度机械臂的运动学。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。

qq_59137727的博客 6647

java剑指Offer——数组中的重复数字

java剑指Offer——数组中的重复数字 文章目录java剑指Offer——数组中的重复数字题目一、解题思路二、具体代码1.重复数组2.哈希表方法 题目 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2。 返回描述: 如果数组中有重复的数字,函数返回true,否则返回false。 如果数

qq_53525892的博客 285

从零抓包分析AVDTP:用Wireshark解密蓝牙音频传输全流程

本文详细介绍了如何使用Wireshark抓包工具分析AVDTP协议,解密蓝牙音频传输的全流程。从实验环境搭建到信令交互解析,再到媒体流传输深度分析,逐步揭示蓝牙音频传输的技术本质,帮助开发者深入理解AVDTP协议的工作机制。

sun99的博客 202

ANSYS二次开发:Python和ANSYS进行交互操作(PyAnsys库,DPF)

🎈ANSYS二次开发:APDL开发入门准备🎈- 🎈ANSYS二次开发:后处理使用APDL命令流解析结果文件🎈 🎈ANSYS二次开发:Python解析ANSYS结果文件(PyAnsys库)🎈 🎈ANSYS二次开发:Python操作ANSYS(PyAnsys库,PyDPF)🎈 文章目录1、简介2、安装2.1 ansys-mapdl-core2.2 pyaedt2.3 ansys-dpf-core2.4 ansys-dpf-post2.5 ansys-mapdl-reader2.6 G...

爱看书的小沐 2万+

找数组中重复的数字(java代码实现)

找数组中重复的数字 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1。......

qq_42250887的博客 4147

在 ABAP 平台配置 OAuth 2.0 Client(OA2C_CONFIG):一份可落地的全景实践

本文详细介绍了在ABAP平台中配置OAuth 2.0客户端的完整流程。重点讲解了四种授权类型(Client Credentials、Authorization Code、SAML 2.0 Bearer Assertion、Resource Owner Password Credentials)的适用场景和配置要点,以及客户端认证的三种方式(Client Secret、Client Certificate、mTLS)。文章提供了操作步骤、排错建议和工程实践指导,包括端点配置、回调地址管理、scopes设置等关

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 354

03. 数组中重复的数字

题目: 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 第一种方法: 解析: 这里利用HashSet(无序,不可重复)的不可重复的特点 当遍历该数组的时候如果不能把下一个数字添加进集合里,说明出现了重复的数字,此时把该数字记录下来,跳出循环,最后返回即可.

qq_40576635的博客 119

【系统分析师】高分论文:论软件需求验证方法及应用

本文以某清算平台建设项目为例,探讨了软件需求验证方法的应用。该项目旨在隔离银行与支付公司的直接通信,满足央行监管要求。作为系统分析师,作者通过需求测试和需求评审两种方法确保需求质量。需求测试采用概念测试用例提前发现问题;需求评审通过正式与非正式形式多方确认需求。项目结合邮件评审、专家会议等方式,最终形成完善的需求文档。平台上线后运行良好,验证了需求管理的重要性。该案例表明,科学的需求验证是项目成功的关键保障。

数据知道的博客 8123

一文吃透 Tools for Applying SAP Notes:从 SNOTE、TCI 到 Solution Manager 与 SAP Cloud ALM

本文系统梳理了SAP技术与运维团队应用SAP Notes的高效工具与方法,涵盖On-Premise与云环境。文章首先阐述了精研SAP Notes工具的必要性,指出其是实施错误修复、法务变更和性能改进的关键载体。随后详细介绍了SNOTE、TCI、Solution Manager、Cloud ALM和Maintenance Planner等核心工具的定位与适用场景,并通过采购异常案例展示了标准更正流程。针对复杂修复场景,文章提出了TCI的批量处理方案,并强调将Note实施纳入变更治理流程的重要性。最后总结了三种

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 348

数组学习总结

数组这一单元对于我们来说是全新的一个内容,在这个单元里我们需要理解许多有关数组的基本概念与内容,这对我们来说具有一定的挑战性,特别是字符数组至少对我来说难度挺大。 数组:按顺序排列的一组同种类型的变量构成的集合 一、知识小结 一维数组 类型标识符 数组名[常量表达式]; 其中,类型标识符可以是任何基本数据类型,也可以是结构体等构造类型,相同类型的数组可以一起定义。数组名必...

weixin_45665079的博客 311

linux那些事之numa balance

numa balance numa balance是页迁移技术最重要也是最开始使用应用的技术,主要是为解决由于调度器进程在两个node迁移造成访问内存性能问题。 numba balance通过页迁移技术,将不在运行节点的内存迁移到所运行的节点上。对应numa balance要注意几点: 防止进程在两个节点之前来回切换造成频繁进行页迁移(ping pang现场)从而影响性能。numa balance本身就是为了提高性能,不能因为造成频繁页迁移而对性能进行一个反向优化。 多个线程分布在不同线程 访.

weixin_42730667的博客 3907

(java)剑锋Offer(找出数组中任意一个重复的数字)题目一

以下为代码实现: package com.example.offer; import java.util.HashMap; /** * 在一个长度为n的数组里的所有数字都在0-n-1的范围内。数组中某些数字是重复的, * 但是不知道有几个数字重复了,也不知道每个数字重复了多少次。 * 找出数组中任意重复的数字 */ public class DuplicateTest { ...

ToBe_Coder的博客 372

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java统计数组中重复数及重复个数

    鉴于这几天在回答过程中获取相关题主所提出的相关问题,在此也记录回答中一个常见问题,如果是刚刚起步学习编程的小伙伴,统计数组中重复数及重复个数这个问题是很容易碰到,感觉大学中的任课老师也喜欢出此类型的题目让各位练习。虽然本人也是最近才开始回答问题的,但是我能担保我回答的每一个问题都很用心,即便是题主后续继续追问我也是会很耐心花时间给你们解答的,因为在回答过程中我自己也是收获满满,既是帮助各位小伙伴,也是让自己能够温故而知新,一举两得,何乐不为呢? ......

Fish_Vast的博客 8743

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

找出数组中任意重复的数字(不修改数组)

题目 在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或者3。 思路 借鉴二分查找的思想,将数字1~n拆分成1~m和m+1~n两部分,如果数字范围1~m中数字个数大于m,则重复数字在1~m中间,否则重复...

小麦大大博客 577

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数组 找出重复的数字(不修改数组)

题目: 在一个长度为n+1的数组中所有数组都在1~n 的范围内,所以数中至少有一数字是重复的;请找出数组中任意一个重复的数字,但不能修改原数组; 例如: 输入长度为8(n+1)的数组{2,3,5,4,3,2,6,7},那么对应的输出重复的数字是2或3; 分析: 假如没有重复的数字,那么在1~n(1~7)的范围内就只会有n(7)个数字;由于数组包含超过n(7)个数字,所以一定包含了...

小太阳 579

Java剑指offer3 :查找数组中重复的数字

关注公众号:Pyhon大视界,专注于Java和python,大数据开发。 Java 剑指Offer 3 题解: 统计一个数组中重复的数字,已知数组中所有的数值介于0到n-1之间,可以尝试将第i个元素放到第i个位置,那么,假如 i 位置已经有数值了,那么,我们就知道已经重复了。如下图所展示的,逐次遍历。 替换法(O(n),O(1)) 数组存放原则:numbers[i] = i 遍历数组所有元素,交换不符合数组存放原则的元素: 例如[2,3,1...

尚拙的博客 677

java不修改数组找出重复的数字

在一个长度为n+1的数组里面的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为9的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或者3 算法时间复杂度为 O(n),空间复杂度O(n),创建一个新n+1的数组data,遍历原来的数组如 2 将2存到 data[2]中, 3存到data[3]...

weixin_40593587的博客 643

算法面试题之不修改数组找出重复的数字

算法面试题之不修改数组找出重复的数字

Yummy 5240

数组中重复的数字(不改变数组)

题目:不修改数组找出重复的数字。在一个长度为n+1的数组中的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。在不修改输入数组的情况下找出数组中任意一个重复数字。例如输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},则对应输出的是2或者3。 由于不能修改输入的数组,我们可以创建一个长度为n+1的辅助数组,然后逐一把原数组的每个数字复制到辅助数组。如果原数组中被复制的...

uguihiho9ihu的博客 351

java 实现递归查找数组中的重复数字

java 实现递归查找数组中的重复数字

longdragen的专栏 1354

编程题1.找出数组中重复的数字-O(1)空间复杂度实现

题目一:找出数组中重复的数字 在一个长度为n的数组里的所有数字都在0-n-1的范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次 。请找出数组中任意一个重复的数字。 java代码实现: public class ThirdQues { public static void main( String[] args){ Scanne...

qq_41258836的博客 4341

java查找数组中的重复元素,并计算重复的次数。

首先我们定义一个一维数组: private static String[] arr = {"1", "3", "6", "3", "2", "5", "6", "4", "3", "2", "1", "4"}; 我们将一维数组转为ArrayList对象: private static List<String> list = Arrays.asList(arr); private ...

陌尘吖的博客 1万+

详细图解leetcode_1743. 从相邻元素对还原数组--leetcode刷题之路

leetcode_1743题目描述题目大意思路描述代码写在最后 题目描述 存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。好在你还记得 nums 中的每一对相邻元素。 给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相邻。 题目数据保证所有由元素 nums[i] 和 nums[i+1] 组成的相邻元素对都存在于 adjacentPairs 中,存

Adorablenewbaby的博客 317

《剑指offer》第三_一题(找出数组中重复的数字,可改变数组)

// 面试题3(一):找出数组中重复的数字 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3}, // 那么对应的输出是重复的数字2或者3。 #include <iostr...

weixin_30654583的博客 95
上一篇: (java)剑锋Offer(找出数组中任意一个重复的数字)题目一
下一篇: Oracle 如何在where子句中加入case when
程序员楂楂
博客等级 码龄9年 17粉丝 70原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值