一、定義區域性最小的概念。arr長度為1時,arr[0]是區域性最小。arr的長度為n(n>1)時,如果arr[0]< arr[1],那麼arr[0]是區域性最小;如果arr[n-1]< arr[n-2],那麼arr[n-1]是區域性最小;如果0< i< n-1,既有arr[i]< arr[i-1]又有arr[i]< arr[i+1],那麼arr[i]是區域性最小。 給定無序陣列arr,已知arr中任意兩個相鄰的數都不相等,寫乙個函式,只需返回arr中任意乙個區域性最小出現的位置即可。
二、對於乙個有序陣列arr,再給定乙個整數num,請在arr中找到num這個數出現的最左邊的位置。
給定乙個陣列arr及它的大小n,同時給定num。請返回所求位置。若該元素在陣列中未出現,請返回-1。
測試樣例:
[1,2,3,3,4],5,3
返回:2
//最左的位置,即等於num的第乙個數
public:
int findpos(vector
arr, int n, int num)
else
if(arr[mid]>num)
right=mid-1;
else
left=mid+1;
}return res;}};
三、對於乙個有序迴圈陣列arr,返回arr中的最小值。有序迴圈陣列是指,有序陣列左邊任意長度的部分放到右邊去,右邊的部分拿到左邊來。比如陣列[1,2,3,3,4],是有序迴圈陣列,[4,1,2,3,3]也是。
給定陣列arr及它的大小n,請返回最小值。
測試樣例:
[4,1,2,3,3],5
返回:1
class minvalue
if (left == right-1)
int mid = left + (right - left) / 2;
if (arr[left] > arr[mid]) //最小值在left和mid之間
if (arr[right] < arr[mid]) //最小值在mid和right之間
while (left < mid)
else
if (arr[left] < arr[mid])
else}}
if (arr[left] < arr[right])
return arr[left];
else
return arr[right];}};
演算法學習 二分搜尋二分答案2
顧名思義,二分答案就是用二分查詢的思路去找答案,下面通過舉例來說明。題目 p1873 砍樹 砍下樹木的高度 h 從 0 一直到所有樹木中最高的高度 hmax 依次遞增,我們可以此為依據進行二分搜尋得出答案。includeusing namespace std long long n,m,arr 10...
Java 二分搜尋 二分查詢
對陣列元素進行逐個查詢顯然是費時費力的工作,我們可以使用一些方法快速地搜尋出陣列中元素的指定位置.接下來我們介紹一種方法 二分搜尋法 二分搜尋法充分利用了元素間的次序關係.基本思想 將n元素分成個數大致相同的涼拌,取arr n 2 與欲查詢的x做比較,如果 下面將採用兩種方式 遞迴 非遞迴 來展示二...
二分(二分答案 二分搜尋)與單調性
經典二分搜尋是二分空間範圍。二分答案又叫二分猜值,是二分解的值空間。其實可以統一,普通的二分搜尋也是二分答案值域 下標空間,也是猜值。二分必須滿足單調性,最直觀的,二分搜尋只能在有序陣列上進行。單調性體現在,下標和元素值是單調的,也就是 if j i 有 a j a i 一般二分答案解決的問題是最優...