首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    剑指 03— 数组中重复的数字

    剑指 Offer 03. 数组中重复的数字 难度简单372 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。...数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。...方法二: 原地置换法 注意:数字的范围与数组的长度相同,我们可以把数组看成哈希表 把数组的索引看成哈希表的kye,数组的元素看成哈希表的值val 把值为val的元素放在键也为val的位置上,也就是哈希表键值对的映射关系为...key == val 如果当前数字 nums[i] 和索引 i 不相等,那么应该把 nums[i] 放在索引也为 nums[i] 的位置去,就把索引为 nums[i] 和 i 的数字对换 如果数组在索引为...nums[i] 位置的数在交换前就已经是 nums[i],说明nums[i]是重复数字,返回nums[i] 如果交换后在 nums[i] 仍然不等于 i,要继续交换,这是使用while循环的原因

    60220

    剑指50-数组中重复的数字

    哈希表、in-place方法、快慢指针 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。...请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。...解法 这个题目和之前有个题很像,数组除了两个数字,其余数字都是出现了两次 这两道题都能用万能解法,哈希表 这道题除了哈希表还有一种方法:in-place,也叫下标定位法 数组里每个数组都会指向下一个下标...,当numbers[i] == numbers[numbers[i]]时,numbers[i]为重复的数字,在此之前,需要一直交换numbers[i]和numbers[numbers[i]],直到i !...,快慢指针可以检测出数组是否存在环,但是,不能确定sings hi都存在重复的数字,因为形成环不一定需要重复数字,例如[2,1,3,0,5],这里的2、1、0构成环,所以快慢指针会返回2,这里也罢错误的记录下

    21820

    剑指Offer-数组中重复的数字

    package Array; /** * 数组中重复的数字 *在一个长度为n的数组里的所有数字都在0到n-1的范围内。 * 数组中某些数字是重复的,但不知道有几个数字是重复的。...也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 * 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。...* 思路: * 数组中的数字都在0到n-1的数字范围内。如果数组中没有重复出现的数字,那么当数组排序后数字i就出现在数组中下标为i的元素处。...那么数组中如果存在重复数字的话,有些位置的对应的数字就没有出现,而有些位置可能存在多个数字。数组用numbers表示 那么我们重排这个数组。从第0个元素开始。...3、循环退出的条件是直至数组最后一个元素,仍没有找到重复的数字,数组中不存在重复的数字。

    90440

    剑指offer - 数组中重复的数字 - JavaScript

    题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0 ~ n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。...请找出数组中任意一个重复的数字。 题目描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0 ~ n-1 的范围内。...数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。...解法 1: 使用哈希表 哈希表的结构是:number-boolean,number 就是数组中的数字,boolean 代表数字是否出现过。...整体的流程是:遍历数组中的数字,检查是否出现过,如果出现过,那么返回此数字。

    1K30

    剑指Offer(三) 数组中重复的数字

    findRepeatNumber(int[] nums) { //1,初始化Hash表 Set set = new HashSet(); //2,遍历数组...O(n),因为哈希表需要申请额外的 n 个空间,这里用到的是典型的空间换时间的思想。...时间复杂度: 空间复杂度: 3,数组解法 public int findRepeatNumber(int[] nums) { int[] bucket = new int[nums.length...但是使用数组绝对会有性能的提高,主要表现在如下的两个方面: 哈希表 (HashSet) 底层是使用数组 + 链表或者红黑树组成的,而且它的数组也是用不满的,有加载因子的。...所以使用数组来代替哈希表,能节省空间 哈希表在判重的时候需要经过哈希计算,还可能存在哈希冲突的情况,而使用数组则可以直接计算得到 index 的内存位置,所以使用数组访问性能更好。

    19270

    剑指Offer(五十)-- 数组中重复的数字

    数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。...当然除了set,我们也可以直接借助数组,因为所有数字都在0到n-1的范围内,我们用一个大小为n的数组,就可以对所有的数字进行统计个数,如果个数超过1,那么肯定是重复的数字,如果没有重复的数字,则返回-1...那么有没有空间复杂度为O(1)的做法呢?肯定是有的,不借助额外的空间,那么就只能操作原数组了。如果没有重复的情况,那么这些数字排序后,数字i和数组下标i应该是一一对应的。不会出现多个数字i的情况。...基于这个原则,我们在遍历数组的时候,将元素i调整到下标i的位置,如果下标i的位置已经有元素,那么说明冲突了,这个元素肯定是重复的,否则继续调整后面的。如果没有发现重复的数字,就返回-1。...,因为调换的时候,很容易将后面的数字换到前面去,就会导致求解出来不是第一个重复的数字(可以用来求解任意的重复数字),可能是第2,3...或者其他的重复数字。

    30810

    【剑指offer|1.数组中重复的数字】

    文章目录 0.数组中重复的数字 1.堆排序 2.修改数组的方法 3.不修改数组的方法 0.数组中重复的数字 关键字: 长度为n的数组nums中所有数字都在0~n-1范围内 返回任意一个重复的数字...{ if(nums[i-1]==nums[i]) return nums[i]; } return -1; } }; 2.修改数组的方法...修改数组的方法: 因为有n个元素,每一个元素都在0~(n-1)范围内,如果元素不重复的话, 对数组重排之后,下标和元素值之间应该是一一对应的关系 但是因为重复的原因,重排之后,必然会导致一些下标对应的位置没有元素...现在我们重排这个数组: 当扫描下标为i的数字m的时候,首先比较这个下标i是否等于数字m,如果等于就啥也不做,然后继续扫描下一个元素 如果不等于就找到下标为m的位置:假设这个元素值为数字n: 2.1...swap(&nums[i], &nums[nums[i]]); } } } return -1; } 3.不修改数组的方法

    18320

    每日一题《剑指offer》数组篇之数组中重复的数字

    今日题目链接:数组中重复的数字 数组中重复的数字 难度:简单 描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。...也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。...存在不合法的输入的话输出-1 数据范围 数据范围:0 0≤n≤10000  进阶:时间复杂度O(n) ,空间复杂度O(n) 举例 解题思路 方法一:利用HashMap来记录每个数字出现的次数,key为数组中的数字...,value为出现的次数,遍历一遍数组,每次利用ContainsKey的true或者false来进行判断,如果为true说明map中已经存在这样的数字了,便将其value+1;如果为false说明是第一次出现这样的数字直接将其...put进map中value为1 方法二:数据重排,重头到尾扫描数组S中的每一个元素,当扫描到第i个元素的时候,比较第i个元素位置的值m是否等于i,如果相等,则说明该元素已经在排好序的位置,继续扫描其他元素

    21940

    剑指offer|03. 数组中重复的数字

    题目描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了, 也不知道每个数字重复了几次。...请找出数组中任意一个重复的数字。...方法3、借助一个辅助数组 定义一个额外的数组 int[] counts = new int[len], 用于记录数字的出现次数。...方法4、原地交换 此方法目标是将数据放到对应的位置上去,使数组下标=数组下标对应的值,即num[i] = i。...小结 本文针对剑指offer的一道题目"03.数组中重复的数字"进行了解答,一共提供了4种方法。如果是在面试,这种题目一定要和面试官沟通其期望的时间 / 空间复杂度。

    21120

    剑指offer之找出数组中重复的数字

    文章目录 找出数组中重复的数字 方法一 使用hashset 方法二 巧妙采用原地置换法 找出数组中重复的数字 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。...数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。...如果没有重复数字,那么正常排序后,数字i应该在下标为i的位置,所以思路是重头扫描数组,遇到下标为i的数字如果不是i的话,(假设为m),那么我们就拿与下标m的数字交换。...在交换过程中,如果有重复的数字发生,那么终止返回ture 看给的示例 [2, 3, 1, 0, 2, 5, 3] 第一个是2 发现下标为2的元素和2不相等 就和下标为2的元素交换 变成[1, 3, 2,...发现下标为3的元素正好和3相等 就跳过 第五个是2 发现下标为2的元素和2相等 说明重复了 就直接输出返回

    28310

    剑指offer(一):找出数组中重复的数字

    ❝涓滴之水终可以磨损大石,不是由于它力量强大,而是由于昼夜不舍的滴坠。——贝多芬❞ 找出数组中重复的数字 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。...数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。...例如,如果输入长度为 7 的数组 {2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字 2 或者 3。 解法 解法一 排序后,顺序扫描,判断是否有重复,时间复杂度为 O(n²)。...从头到尾遍历数组,当扫描到下标 i 的数字 nums[i]: 如果等于 i,继续向下扫描; 如果不等于 i,拿它与第 nums[i] 个数进行比较,如果相等,说明有重复值,返回 nums[i]。...; 数组中不包含重复的数字; 无效测试输入用例(输入空指针;长度为 n 的数组中包含 0~n-1 之外的数字)。

    65210
    领券