1. 程式人生 > 實用技巧 >Vulnhub-靶機-BREACH: 3.0.1

Vulnhub-靶機-BREACH: 3.0.1

題目描述:

找出陣列中重複的數字。

在一個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意一個重複的數字。

示例 1:

輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3 

限制:

2 <= n <= 100000

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof

1、暴力求解

  • 時間複雜度是 O(n^2)
  • 空間複雜度是 O(1)

2、藉助HashSet

  • 時間複雜度是 O(n)
  • 空間複雜度是 O(n)

將陣列中的元素儲存到HashSet集合中,藉助於HashSet集合的方法判斷元素是否重複,集合中存在的話就返回該元素,不存在的話就返回-1.

3、陣列代替雜湊表

將nums陣列中儲存的元素的大小作為bucket陣列的下標,然後將nums陣列的下標儲存到bucket陣列中。也就是說如果nums陣列中存在相同的元素就會在bucket中存在“碰撞”,

時間複雜度和空間複雜度都是O(n)

4、最優解法

(1)陣列中沒有重複元素的

陣列初始化:

交換陣列中的元素:

(2)陣列中存在重複元素的情況