劍指 offer(查詢陣列中重複的數字)

2021-09-30 18:33:51 字數 800 閱讀 7977

題目描述:

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

解題思路:

要求複雜度為 o(n) + o(1),也就是時間複雜度 o(n),空間複雜度 o(1)。因此不能使用排序的方法,也不能使用額外的標記陣列。

對於這種陣列元素在 [0, n-1] 範圍內的問題,可以將值為 i 的元素調整到第 i 個位置上進行求解。

以 (2, 3, 1, 0, 2, 5) 為例,遍歷到位置 4 時,該位置上的數為 2,但是第 2 個位置上已經有乙個 2 的值了,因此可以知道 2 重複。

對於解題思路的理解分析:

關鍵點:

1、陣列中的所有數字都在0到n-1的範圍內,試想如果陣列中的數字不是在0-n-1的範圍,此種方法是否還適用?不適用。

2、查詢的是陣列中任意乙個重複的數字。

程式**:

package chapter01;

/* * 在乙個長度為 n 的陣列裡的所有數字都在 0 到 n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的,

* 也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。

* */

public class test01

for(int i=0;i對以上**段進行分析圖:

劍指offer 查詢陣列中重複的數

題3 找出陣列中重複的數字,例如,輸出長度為7的陣列,找出陣列中重複的數字 解題思路 法一 先給陣列進行排序,從排序好的陣列中找到重複的數字,時間複雜度o nlogn 法二 利用雜湊表,如果雜湊表裡面 沒有此數字,就把他加入雜湊表,如果有,就找到了,提高了時間效率,時間複雜度是o n 但他是以乙個大...

劍指offer 查詢陣列中重複的數字

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100000 第一種解決方法使用字典依...

劍指Offer (陣列)陣列中重複的數字

題目鏈結 題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。解決方法class solution retur...