二分搜尋(2)

2021-08-09 21:22:59 字數 1566 閱讀 9911

一、定義區域性最小的概念。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 一般二分答案解決的問題是最優...