文章目录

  • 题目描述
  • 思路 & 代码
    • 二刷

题目描述

  • 倒是和leetcode 287 寻找重复数很像。。但是不能使用那道题的快慢指针法(也可能是我太菜了)
  • 重点在于题干的描述【长度为 n 的数组,数字范围【0 ~ n - 1】

思路 & 代码

  • 可以直接用动态哈希~
class Solution {public int findRepeatNumber(int[] nums) {// 1. 哈希表 O(n) && O(n)Set<Integer> hashset = new HashSet<>();for(int i : nums){if(hashset.contains(i)){return i;}hashset.add(i);}return -1;}
}
  • 也可以把数组转化成逻辑上的哈希表~
class Solution {public int findRepeatNumber(int[] nums) {// 转化成哈希表,原地置换for(int i = 0; i < nums.length; i++){while(nums[i] != i){// 哈希冲突,碰到重复值了if(nums[nums[i]] == nums[i]){return nums[i];}// 当前下标不同时,一直置换int temp = nums[nums[i]];nums[nums[i]] = nums[i];nums[i] = temp;}}return -1;}
}

二刷

  • 哟,用了个新方法!
  • 不过还是会稍微慢一点(毕竟跑两次)
  • 但是很好理解:数值出现一次,就对对应下标的存储值加长度,加了两次以上就说明重复。
class Solution {public int findRepeatNumber(int[] nums) {for(int temp : nums) {nums[temp % nums.length] += nums.length;}for(int i = 0; i < nums.length; i++) {if(nums[i] >= 2 * nums.length) {return i;}}return -1;}
}

【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)相关推荐

  1. leetcode 剑指 Offer 03. 数组中重复的数字 抽屉原理 一个萝卜一个坑

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

  2. Leetcode 剑指 Offer 03. 数组中重复的数字 (每日一题 20210614)

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

  3. leetcode 剑指 Offer 03. 数组中重复的数字

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

  4. 【三种解法实现】剑指 Offer 03. 数组中重复的数字

    立志用最少的代码做最高效的表达 题目链接-->传送门 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数 ...

  5. 【算法】剑指 Offer 03. 数组中重复的数字

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

  6. 剑指 Offer 03. 数组中重复的数字()

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

  7. LeetCode-剑指 Offer 03. 数组中重复的数字

    剑指 Offer 03. 数组中重复的数字 思路一:先排序,然后找到最近的两个相邻的一样数返回 class Solution {public:int findRepeatNumber(vector&l ...

  8. Python剑指offer:数组中重复的数字

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

  9. 《剑指offer》数组中重复的数字

    题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7的 ...

最新文章

  1. 一个MySQL锁和面试官大战三十回合,我霸中霸!
  2. Pro ASP.NET MVC –第五章 使用Razor
  3. [笔记] 大家一起来测试,benchmark起来(MySQL下的TPC-C,TPC-H,TPC-W)
  4. Eclipse新建web项目和“javax.servlet.http.HttpServlet“ was not found on the Java Build Path错误
  5. Chrome浏览器插件新建标签页插件Momentum
  6. #中调用委托的简单方法
  7. Cortex-M3-MPU(存储器保护单元)
  8. WPF内存泄露:CollectionViewSource.GetDefaultView导致Cache对象
  9. 电子工程师都在看什么?送你一份“修炼宝典”
  10. 前端学习(2251)提交代码
  11. linux分区label,label英文什么意思单词讲解(Linux中为一个分区设定label)
  12. 二维数组递归算法c语言,C语言课程设计--二维数组的按行求和及递归函数的编写简单家庭财务管理程序的设计.doc...
  13. 浙江高级职称英语 计算机考试时间2016,浙江省2016年度全国专业技术人员职称外语等级统一考试时间...
  14. android qq三方登录授权失败,qq第三方登陆授权失败110401错误码解决办法介绍
  15. java流水号_Java生成流水号
  16. cad插入块_CAD中的块,用得好,画图快人一步!
  17. 51单片机C语言us级延时函数
  18. 2017年6月大学英语六级真题(第一套)阅读理解(一)(每日一摸)
  19. “多巴胺思维”—通往AI秘密的钥匙「AI核心算法」
  20. strcpy和strncpy的区别

热门文章

  1. js纯ajax,自动完成JS类(纯JS, Ajax模式)
  2. stm32l0的停止模式怎么唤醒_手把手教你怎么利用旧电脑搭建NAS组建自己的黑群晖...
  3. oracle磁带的使用期限,rman删除磁带库过期备份问题
  4. python中set index_python中set基础应用
  5. C语言实现大数据除法
  6. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 27丨每次访问的交易次数【难度困难-提前放出来】​
  7. Effective Java~36. 用EnumSet 代替位域
  8. 12c oracle 激活_Windows运维之Windows server 2016 安装及ORACLE 12C 安装
  9. 佳能g2810打印机扫描怎么用_办公用这款佳能彩色激光打印机无线MF643CDW就够了!...
  10. python函数做n_简单Python函数的O(N)时间复杂性