[Leedcode][JAVA][第287题][寻找重复数][HashSet][二分查找][快慢指针]
生活随笔
收集整理的這篇文章主要介紹了
[Leedcode][JAVA][第287题][寻找重复数][HashSet][二分查找][快慢指针]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】[中等]
給定一個包含 n + 1 個整數的數組 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在一個重復的整數。假設只有一個重復的整數,找出這個重復的數。輸入: [1,3,4,2,2] 輸出: 2說明:不能更改原數組(假設數組是只讀的)。 只能使用額外的 O(1) 的空間。 時間復雜度小于 O(n2) 。 數組中只有一個重復的數字,但它可能不止重復出現一次。來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/find-the-duplicate-number 著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。【解答思路】
1. 排序法(不符合題意)
時間復雜度:O(N) 空間復雜度:O(1)
public int findDuplicate(int[] nums) {Arrays.sort(nums);for (int i = 0; i < nums.length - 1; i++) {if (nums[i] == nums[i + 1]) {return nums[i];}}return -1; }2. HashSet (不符合題意)
時間復雜度:O(N) 空間復雜度:O(N)
public int findDuplicate(int[] nums) {HashSet<Integer> set = new HashSet<>();for (int i = 0; i <= nums.length - 1; i++) {if (set.contains(nums[i])) {return nums[i];}else{set.add(nums[i]);}}return -1; }3.二分查找(符合題意)
時間復雜度:O(NlogN) 空間復雜度:O(1)
4. 雙指針(技巧型 符合體題意)
時間復雜度:O(N) 空間復雜度:O(1)
5.二進制(不一定符合題意)
比較1到n和nums各位二進制“1”的數量,nums多出來的1的組合就是重復數組
時間復雜度:O(N) 空間復雜度:O(1)
【總結】
1.二分法查找有序數組 還可以用于確定一個有范圍的整數
2.二分查找經驗(先搞懂思路,再研究細節,多做問題去應用)
- 把定義區間成為左閉右閉區間,左右邊界是無差別的,弄成左閉右開,反而增加了思考的復雜程度;
- 明確 int = left + ( right - left ) / 2 這里除以 2 是下取整;
- 明確 while(left <= right) 和 while(left < right) 這兩種寫法其實在思路上有本質差別, while(left <= right) 在循環體內部直接查找元素,而 while(left < right) 在循環體內部一直在排除元素,第 2 種思路在解決復雜問題的時候,可以使得問題變得簡單;
- 始終在思考下一輪搜索區間是什么,把它作為注釋寫到代碼里面,就能幫助我們搞清楚邊界是不是能取到,等于、+1 、-1 之類的細節;
- 思考清楚每一行代碼背后的語義是什么,保證語義上清晰,也是寫對代碼,減少 bug 的一個非常有效的策略。
3. 快慢指針 鏈表 數組(特定條件)
轉載鏈接:https://leetcode-cn.com/problems/find-the-duplicate-number/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by–52/
參考鏈接:https://leetcode-cn.com/problems/find-the-duplicate-number/solution/er-fen-fa-si-lu-ji-dai-ma-python-by-liweiwei1419/
快慢指針動畫參考鏈接:https://leetcode-cn.com/problems/find-the-duplicate-number/solution/xun-zhao-zhong-fu-shu-by-leetcode-solution/
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的[Leedcode][JAVA][第287题][寻找重复数][HashSet][二分查找][快慢指针]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈《软件工程》常用的几种软件开发方法
- 下一篇: JMeter web 测试