/* 乙個陣列中中間部分都是0,前半部分全是負數,後半部分都是正數,要求時間複雜度盡量低的情況下,查詢最後乙個負數和第乙個正數。
題目中描述的陣列,求解結果是與0比較的,可以看做是有序的,使用二分查詢,時間複雜度可以達到log(n)
*/ // 時間複雜度:o(log n),空間複雜度:o(1)
vectorbinsearchnegativepositive(vector& nums)
; int i = 0, j = nums.size() - 1, mid = 0;
// 左部分陣列,當閉區間 [i,j] 為空時跳出
// 跳出的時候,j為小於0的數的索引,i為0的索引
while (i <= j)
vectorresult(2, -1);
result[0] = nums[j];
// 右部分陣列,當閉區間[i, j] 為空時跳出
// 跳出的時候,i為大於0的數的索引,j為0的索引
j = nums.size() - 1;
while (i <= j)
result[1] = nums[i];
return result;
}
陣列 二分查詢演算法
二分查詢演算法 二分查詢演算法也稱為折半查詢法,它的思想是每次都與序列的中間元素比較。二分查詢的乙個前提條件是陣列是有序的,假設陣列array為遞增序列,finddata為要查詢的數,n為陣列長度,首先將n個元素分成個數大致相同的兩半,取array n 2 與將要查詢的值finddata進行比較,如...
演算法 二分查詢 (陣列)
我們把符合下列屬性的陣列 a 稱作山脈 a.length 3 存在 0 i a.length 1 使得a 0 a 1 a i 1 a i a i 1 a a.length 1 給定乙個確定為山脈的陣列,返回任何滿足 a 0 a 1 a i 1 a i a i 1 a a.length 1 的 i 的...
二分查詢演算法實現
include include using namespace std define n 20 int binary chop int a,int n,int j,int k 找到即返回下標 else if a mid k high mid 1 尋找的值小於中間值,則在左邊一般查詢 else low...