定義區域性最小的概念。arr長度為1時,arr[0]是區域性最小。arr的長度為n(n>1)時,如果arr[0]區域性最小的概念和極小值是一樣的,先判斷邊界,如果arr[0]的值比arr[1]小,arr[n-1]的值比arr[n-2]小,則arr[0]和arr[n-1]也是區域性最小。
如果上面兩種都不滿足,則arr[0]和arr[n-1]之間必然存在乙個區域性最小點,因為arr[0]-arr[1]是下降趨勢,arr[n-2]-arr[n-1]是上公升趨勢,所以陣列中間肯定會有乙個轉折點。如何快速的找:二分,,,假設中間的值為b,b左邊的值為a,b右邊的值為c,如果abc滿足區域性最小則返回b,如果abc是上公升的趨勢,則在0-a區域二分,如果abc是下降的趨勢,則在c-n-1區域二分,依次二分下去會很快找到區域性最小
**實現public class findonelessvalueindex
if (arr.length == 1 || arr[0] < arr[1])
if (arr[arr.length - 1] < arr[arr.length - 2])
int left = 1;
int right = arr.length - 2;
int mid = 0;
while (left < right) else if (arr[mid] > arr[mid + 1]) else
}return left;
}public static void printarray(int arr)
system.out.println();
}public static void main(string args) ;
printarray(arr);
int index = getlessindex(arr);
system.out.println("index: " + index + ", value: " + arr[index]);
Python 尋找區域性最高點
尋找區域性最高點 輸入input 含有最高點高度的列表 輸出output 返回最高點的位置 時間複雜度 o log n deffindhighspot input ilen len input mid ilen 2 1 python中 為小數除法,為地板除 ifinput mid 1 input m...
尋找最小的祖先
題目 給定乙個binary search tree 和兩個節點,尋找這兩個節點的最小公共祖先。首先要盡快給出最直接的辦法,不要管效率的問題。可以利用額外的儲存空間來解決這個問題,先用dfs分別尋找到這兩個元素,並且記錄下尋找過程中遍歷的元素,得到兩個陣列。然後挨個比較陣列中的元素,直到出現不同的為止...
尋找最小的k個數
尋找最小的k個數 在乙個長度為n的陣列中,尋找最小的k個數。最大的k個數解法類似 想法比較簡單,先對n個數排序,再輸入前面k個數,即可。這種方法的時間複雜度比較大。假設我們使用快排,需要o nlogn 然後輸出k個數需要o k 一共要o nlogn 略。這種方法比較好,演算法簡單,易於實現。先把陣列...