我在下面的代碼片段,A是非遞減順序,需要檢查是否X存在于A. 如果X存在于A則回傳出現的位置,X否則A回傳-1。此代碼對于某些輸入不正確,需要修復它。我最多可以修改 3 行。
class Checking{
int check(int[] A, int X) {
int N = A.length;
if (N == 0) {
return -1;
}
int l = 0;
int r = N - 1;
while (l < r) {
int m = (l r) / 2;
if (A[m] > X) {
r = m - 1;
} else {
l = m;
}
}
if (A[l] == X) {
return l;
}
return -1;
}
}
我無法弄清楚修復,任何建議會有幫助?
uj5u.com熱心網友回復:
維基頁面說,對于二分搜索的這種實作,中間元素應該使用上限計算,因此您可以更改為
int m = (l r 1) / 2;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467149.html
上一篇:如何從azureblob容器中獲取影像串列并將它們更改為c#中的縮略圖?
下一篇:通過值獲取頂點
