栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指offer03解题详解+思路(LetCode解题)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指offer03解题详解+思路(LetCode解题)

题目

在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

题目解析

根据这道题,首先肯定是定义一个方法,然后方法体里面对应的属性是数组
(方法一)
首先我们可以使用一下官方的详解,我把它转化成了自己语言来解答。(实际上就是用Set来建立一个集合来存储这个数组中的数据,当存在两个相同的东西的时候,就进行一个返回即可)

class Solution {
    public int findRepeatNumber(int[] nums) {
            Set list=new HashSet<>();//首先就是通过这个Set来存储
            for(int num:nums){
                if(list.contains(num)){//开始遍历这个数组,如果存在的话,就返回这个数字
                    return num;
                }
                else{
                    list.add(num);//如果不存在的话就将这个数字放到集合set里面去,当发现包含的有的时候,就返回
                }
            }
        return -1;//如果一直遍历都没有对应的相同的数字出现的话,就说明不存在这样的数字,然后返回-1
    }
}

不过说实话,发一简直就是脱了裤子放屁,太“简单”啦。
(方法二)
接下来就是方法二的解答了,我们可以进行一个设想,就是,因为这个数组里面的数字都是整数形式的,所以我们不难发现,所有的数字都可以用索引来表示,也就是每当出现第一个数字的时候,我们就可以用它来判断其对应的数字是不是索引,也就是传说中的nums[i]==i,如果是的话,就把它继续放在里面,然后进行下一个遍历,也就是i++,continue,否则的话,就跳出这个循环嘛,这个时候就需要用到while来进行一个解释,及while(i 代码

             ```java
class Solution {
    public int findRepeatNumber(int[] nums) {
            int i=0;
           while(i 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273880.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号