長度為n值域為 0,n 1 的陣列中重複的數字

2021-10-01 01:51:24 字數 1211 閱讀 5661

問題描述

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

解決思路

n 個數字因為它們都在 0 到 n - 1 的範圍內,如果不重複,每乙個數字都能被放在 nums[i] = i 的位置上(值與索引相同)

遍歷陣列,比較 i 和 nums[i],有兩種情況

**

def

findrepeated

(nums)

:for i in

range

(len

(nums)):

ifnot-1

< nums[i]

<

len(nums)

:return-1

for i in

range

(len

(nums)):

while nums[i]

!= i:

if nums[i]

== nums[nums[i]]:

return nums[i]

else

: temp = nums[i]

nums[i]

= nums[temp]

nums[temp]

= temp

return-1

defacquirenums()

:while

true

: sourcestr =

input()

# 相鄰元素以空格分隔

if sourcestr ==

'exit'

:break

lyst = sourcestr.split(sep=

' ')

if lyst ==

none

orlen

(lyst)

<=1:

print(-

1)nums =

list

(map

(int

, lyst)

)print

(findrepeated(nums)

)if __name__ ==

'__main__'

: acquirenums(

)

0 n 1中缺失的數字

乙個長度為n 1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0 n 1之內。在範圍0 n 1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。分析 因為陣列是排序的,因此陣列中開始的一些數字與它們的下標相同。也就是說,0在下標為0的位置,1在下標為1的位置,以此類推。如果不在...

0 n 1中缺失的數字

題目 乙個長度為n 1的遞增陣列中所有的數字都是唯一的,並且每個數字都在範圍0 n 1之內,在範圍內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。第乙個方法先遍歷,求出所有資料的和,再利用公式,找出缺失的資料的值。第二個方法,利用二分查詢,找出缺失的數字。package helen.c ...

0 n 1中缺失的數字

題目 乙個長度為n 1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0 n 1之內。在範圍0 n 1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。示例 1 輸入 0,1,3 輸出 2 示例 2 輸入 0,1,2,3,4,5,6,7,9 輸出 8 思路 判斷當前的數字是否與當...