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 假金條的數學思想 此演算法題借鑑...