旋轉陣列查詢指定值

2021-08-28 02:57:09 字數 1008 閱讀 6693

遞增陣列[1,2,3,4,5],變化為[5,6,1,2,3,4], 給定k,判斷是否存在,並返回其索引位置

二分查詢

選擇中間位置作為判斷的分界點

所以二分中,必定有一部分陣列是遞增有序的,而另一部分則不是,所以當我們取中間點的時候,首先判斷中間點是不是所要尋找的值。

如果不是,則尋找遞增的那一部分陣列

1.前部分是遞增陣列,如果指定值在前部分陣列中,end = mid - 1;否則在後部分陣列中,begin =mid + 1

2.後部分是遞增陣列,如果指定值在後部分陣列中,begin = mid + 1,否則在前部分陣列中,end = mid - 1

3.如果begin,mid,end處的值是相等的,那麼只能順序遍歷

package sordoffer;

/** * 遞增陣列[1,2,3,4,5],變化為[5,6,1,2,3,4]

* 給定k,判斷是否存在,並返回其索引位置

* 思路:

* 1.選擇中間點middle作為拐點

* 2.a[middle] > a[low] middle左邊陣列是有序的

* k <= a[middle] && k >= a[low],可以在左邊陣列查詢。

* 否則在右邊陣列查詢

* a[middle] < a[high] middle的右邊陣列是有序的

* k >= a[middle] && k <= a[high] , 可以在右邊陣列查詢,

* 否則在左邊陣列查詢

*/public

class

findkreversearray

//前部分是遞增陣列

if (arr[mid] > arr[begin])else

}else

}return -1;

}private

intfindinorder(int arr, int k)

return -1;

}}

查詢旋轉陣列最小值

求對於長度為n的陣列a,求子陣列的和接近0的子陣列。例如 定義n長度的空間sum 0 n 1 sum i 是a的前i項和。並且有sum i 1 sum i a i 1 首先對sum i 進行排序,找到求和最接近的2個值。同時記錄使得值最小的陣列最短的那一組。如圖 通過求取求和值最接近的一組資料可以找...

陣列1 旋轉陣列 找最小值 找指定值

1.乙個有序陣列1,2,3,4,5,6,7,8,9,但是被截斷處理了,變成了5,6,7,8,9,1,2,3,查詢陣列的最小值 旋轉陣列求最小值 最小元素位於end start 1的位置 迴圈條件是array start array end 特殊情況 1 旋轉0個元素,第乙個元素是最小值,因此mid初...

查詢旋轉陣列的最小值

旋轉後的陣列變成兩個有序陣列,最小值為兩個陣列的的分界線,前面子陣列的值都大於後面子陣列的值 用索引left right分別指向首尾元素 若陣列是普通公升序陣列,則left 若陣列是迴圈公升序陣列,則left right 計算mid,若mid 若mid right,則,後半段是迴圈公升序陣列 直到找...