劍指 Offer 03 陣列中重複的數字

2021-10-21 21:09:18 字數 1693 閱讀 1044

03. 陣列中重複的數字

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

輸入:

[2, 3, 1, 0, 2, 5, 3]

輸出:2 或 3

python方法1:

使用內建函式排序

遍歷陣列,判斷nums[i]是否等於nums[i+1]

class solution:

def findrepeatnumber(self, nums: list[int]) -> int:

nums.sort()

for i in range(len(nums)):

if nums[i] == nums[i+1]:

return nums[i]

方法2:

建立set集合

遍歷陣列,判斷如果num在set中,return此num;否則將此num存入set中

class solution:

def findrepeatnumber(self, nums: list[int]) -> int:

dic = set()

for i in nums:

if i in dic:

return i

else:

dic.add(i)

方法3:因為在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 ~ n-1 的範圍內,說明陣列元素的索引和值是 一對多的關係。所以將將num中每個數字都放到對應索引處,如果原索引處數字等於此數字,證明有相等,直接輸出

class solution:

def findrepeatnumber(self, nums: list[int]) -> int:

i = 0

while i < len(nums):

if nums[i] == i:

i += 1

continue

if nums[nums[i]] == nums[i]: return nums[i]

nums[nums[i]], nums[i] = nums[i], nums[nums[i]]

return -1

知識點:

set()集合

賦值交換位置

方法1:

class

solution

}return-1

;}};

方法2:

class

solution

return-1

;}};

知識點:

unordered_map容器

mapunordered_map

劍指offer03 陣列中重複的數字

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3限制 2 n 100000 首先拿到這道題最先想到的是...

劍指Offer03 陣列中重複的數字

劍指offer典型題整理 爭取做最好的題解 題目描述 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限...

劍指offer 03陣列中重複的數字

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