3 陣列中重複的數字

2021-09-29 19:30:46 字數 2187 閱讀 5795

#include

using

namespace std;

bool

duplicate

(int numbers,

int length,

int* duplication)

//檢查每乙個元素

for(

int i =

0; i < length; i++)}

for(

int i =

0; i < length; i++

)int temp = numbers[i]

; numbers[i]

= numbers[temp]

; numbers[temp]

= numbers[i];}

}return

false;}

intmain()

;int duplication;

duplicate

(a,7

,&duplication)

;}

·不需要額外空間,也不需要修改陣列元素。

#include

using

namespace std;

intgetduplication

(const

int* numbers,

int length)

int start =1;

int end = length -1;

while

(end >= start)

else}if

(count >

(start - end +1)

)else

}return-1

;//沒找到

}int

countrange

(const

int* numbers,

int length,

int start,

int end)

int count =0;

for(

int i =

0; i < length; i++)}

return count;

}int

main()

;int duplication;

int i;

i =getduplication

(a,7);

cout << i

}

·在計算陣列的中間位置時,為什麼更喜歡start+(end-start)/2而不是(start+end)/2 ?

start + end容易溢位;

如果start和end是指標,指標只能做減法運算。

·**

#include

using

namespace std;

intcountrange

(const

int* numbers,

int length,

int start,

int end)

}return count;

}int

getduplication

(const

int* numbers,

int length)

int start =1;

int end = length -1;

while

(start <= end)

else

}// 二分法的模版

if(count >

(middle - start +1)

) end = middle;

else

start = middle +1;

}return-1

;}# define n 7

intmain()

;int ret;

ret =

getduplication

(null

, n)

; cout << ret << endl;

system

("pause");

return0;

}

·評價:

演算法不實用,如果長度是len,元素取值範圍必須是1~len-1,這樣才能保證這個演算法能用且一定會有乙個重複元素。

3 陣列中的重複數字

class solution1 return res 例如給定的例子,陣列第0個數字為2,下標與自身不匹配,我們將其與下標為2的數字進行交換,交換後得到 此時第0個數字為1,依舊與下標不匹配,我們將其與下標為1的數字進行交換,得到陣列 仍舊不匹配,繼續交換 此時我們發現,從0 3的數字都與自身下標相...

Sword Offer 陣列中重複的數字 3

在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍內.陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複率幾次.請找出陣列中任意乙個重複的數字.例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2後者3 usr bin env python3 coding utf 8 a...

ATO 3 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。class solution else return i ist 雜...