演算法實現 二分查詢 陣列中負數與正數

2021-09-21 17:36:18 字數 620 閱讀 9984

/*  乙個陣列中中間部分都是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...