例如2,3,4,5,6,8,9.在這個陣列中我們要找到缺少的7。從直覺上看,我們可以把2到9求和,然後把陣列的成員求和。用數字的和減去陣列的和得到的就是缺少的數字。但是這個辦法的時間複雜度是o(n)。但是我們看到陣列是有序的,能不能通過二分法找到數字呢,答案是肯定的。我們可以發現規律,如果數字缺少在陣列的前半部分,那麼陣列的中間節點會大於數字的中間節點。例如1,3,4由於缺少2,所以陣列的中間節點變成了3,但是數字的中間節點仍然是2。如果缺少的數字在後半部分,則陣列中間節點等於數字的中間節點。通過這個規律,我們可以通過二分法找到缺少的數字的準確位置。
int findmissednumber(int* list, int start, int end)
if(end - start == 1)
else
} if(list[(end - start )/ 2] > (end - start) / 2+ start)
else
}
二分法在有序陣列中查詢乙個數
演算法思想 首先條件為有序陣列,先查詢中間下標的元素 1 如果該元素等於7,則返回中間下標,查詢結束 2 如果該元素大於7,則7必然在中間元素的右邊部分,則縮小範圍,在右半部分查詢7,再計算右半部分的中間下標,轉到 1 3 如果該元素下於7,則7必然在中間元素的左半部分,則縮小範圍,在左半部分查詢7...
在有序旋轉陣列中找到乙個數
題目 有序陣列arr可能經過一次旋轉處理,也可能沒有,且arr可能存在重複的數。例如,有序陣列 1,2,3,4,5,6,7 可以旋轉處理成 4,5,6,7,1,2,3 等。給定乙個可能旋轉過的有序陣列arr,再給定乙個數num,返回arr中是否含有num。public class getnum in...
在有序旋轉陣列中找到乙個數
在有序旋轉陣列中找到乙個數 有序陣列arr可能經過一次旋轉處理,也可能沒有,且arr可能存在重複的數。例如,有序陣列 1,2,3,4,5,6,7 可以旋轉處理成 4,5,6,7,1,2,3 等。給定乙個可能旋轉過的有序陣列arr,再給定乙個數num,返回arr中是否含有num 關於旋轉操作 可以簡單...