《剑指offer》——03. 数组中重复的数字——HashSet、哈希思想——java实现
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》——03. 数组中重复的数字——HashSet、哈希思想——java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄:
- 1.題目描述
- 2.解決方案
- (1)HashSet方法解決
- (2)哈希思想(巧解)
- 3.參考
1.題目描述
找出數組中重復的數字。
????????在一個長度為 n 的數組 nums 里的所有數字都在 0~n-1 的范圍內。數組中某些數字是重復的,但不知道有幾個數字重復了,也不知道每個數字重復了幾次。請找出數組中任意一個重復的數字。
示例 1:
輸入:
????????[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
限制:
????????2 <= n <= 100000
2.解決方案
(1)HashSet方法解決
- 使用 HashSet 來進行處理,因為 HashSet 本身不允許出現重復元素,所以當添加元素失敗或已經包含該數字時,則表示出現了重復元素,將其返回即可。
- 時間復雜度:O(n),空間復雜度:O(n)
- 時間復雜度為O(n),是因為有for循環
- 空間復雜度為O(n),是因為new HashSet()申請了空間
(2)哈希思想(巧解)
- 所有數字都在 0 ~ n-1 的范圍內,將每個位置的數交換映射到其對應的數組下標下面,當出現新的元素與其對應的下標中的數字相等時,即為重復數字
- 哈希的思想,數組本身做哈希表,達到了節省空間的目的
- while 循環,保證交換過來的新元素位置也要正確,即令:a[i]=i 。
- 時間復雜度:O(n),空間復雜度:O(1)
- 看圖了解其過程:
3.參考
鏈接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/solution/hua-jie-suan-fa-mian-shi-ti-3-shu-zu-zhong-zhong-f/
總結
以上是生活随笔為你收集整理的《剑指offer》——03. 数组中重复的数字——HashSet、哈希思想——java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.2.4 数据的的存储和排列
- 下一篇: 1.3.2 中断和异常(内中断和外中断、