#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 雜...