找出陣列重複的數

2021-10-01 02:24:36 字數 1263 閱讀 1385

1、在乙個長度為 n 的陣列裡的所有數字都在 0~n-1 的範圍內,找出任意乙個重複的數。

簡明思路:

按照題目要求,如果這個陣列裡面的數恰好沒有重複的數,則陣列下標跟對應的值相等。否則,當掃瞄到下標為 i 的數字時,比較這個下標的值(m)是不是等於 i ,如果是,說明這個值就在它對應的下標下,繼續掃瞄;如果不等,那麼位置不對,則拿它跟第 m 個數作比較,如果它跟第 m 個數相等,此時就找到了乙個重複的數;不等,把第 i 個數和第 m 個數交換,把 m 放到屬於它的位置。重複此過程,直到找到任意乙個重複的數。

//2,3,1,0,2,5,3

private

intduplicate

(int

arr)

else}}

return-1

;//沒找到

2、用其它思路找出陣列中任意乙個重複的數

//呼叫arrays.sort()方法對陣列進行排序

//排序後,如果有重複元素,必定是相鄰的元素

//找出任意第乙個重複的數就返回

public

static

intsortduplicate

(int

arr)

return-1

;//沒找到

}//不排序,暴力搜尋,找到第乙個重複的數就返回

public

static

intviolentduplicate

(int

arr)

}return-1

;//沒找到

}

3、用 set 容器輸出陣列中所有重複的數, set 容器的特點就是不儲存重複的數。

//先排序再搜尋

public

static set

duplicatesetsort

(int

arr)

return set;

}//暴力搜尋

找出陣列中所有重複的數

include stdafx.h for i 0 to n 1 while a a i a i swap a i a a i end while end for for i 0 to n 1 if a i i then print a i end if end for void swap int a...

287 找出陣列中重複的數

交換法主要思想是通過交換陣列元素,使得陣列上的元素在正確的位置上。遍歷陣列,如果第 i 位上的元素不是 i 1,那麼一直交換第 i 位和 nums i 1 位置上的元素。public static list test1 int nums list list newlist for int i 0 i...

找出陣列中是否有重複的數

2010 09 09 23 03 59 分類 c c 標籤 c 字型大小大中小 訂閱 陣列a n 1至n 1這n 1個數存放在a n 中,其中某個數重複一次。寫乙個函式,找出被重複的數字。時間複雜度必須為o n 函式原型 int do dup int a,int n 假金條的數學思想 此演算法題借鑑...