發現還是陣列這種最簡單的編碼才適合我,遇到樹,鍊錶這些真的是一頭霧水,自己也不知道怎麼實現。言歸正傳,該篇文章介紹如何求旋轉陣列的最小值,求最大值可以適當改編即可。
什麼是旋轉陣列呢,就是將乙個陣列的前幾個元素和後面幾個元素互換位置。例如原陣列(公升序的陣列)為,將其旋轉後變為。如何求該陣列的最小值呢,有一種方法是直接按順序比較,但是這就體現不出旋轉陣列的特性了,所以更好的解法應該是採用二分法來求得該陣列的最小值。我們可以發現在旋轉陣列中9座標的數都比它小,右邊的數也都比它小。我們設有2個指標,左指標指向最左邊的元素,右指標指向最右邊的元素。我們判斷中間的元素和最左邊元素的大小,如果中間的數大於左指標指向的元素,證明最小的數字在中間數字的右邊。這樣我們就可以縮小範圍啦。
**如下
#include#include#include #include #includeusing namespace std;
int min(int a, int length)
return a[right];
}int main()
; int min=min(a, 6);
cout << min << endl;
system("pause");
}
不過很顯然這種方法不是很完善的,因為沒有考慮一種比較特殊的情況,就是陣列中擁有重複元素的時候。比如陣列,。這種時候就只能選擇順序查詢的辦法啦。
改進**如下:
#include#include#include #include #includeusing namespace std;
int mininoder(int a, int left,int right)
return result;
}int min(int a, int length)
return a[right];
}int main()
; int min=min(a, 6);
cout << min << endl;
system("pause");
}
求旋轉陣列的最小數字
package com.study 求旋轉陣列的最小數字 設定 輸入遞增排序陣列的乙個旋轉 要求返回最小的數 public class suanfa6 private static int arr private static int arr private static int arr priva...
旋轉陣列最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列 為的乙個旋轉,該陣列的最小值為1。code int min int numbers,int length int low 0 int high length 1 in...
旋轉陣列最小數字
旋轉陣列最小數字 劍指offer 二分查詢 題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。解題思路 題目要求找到最小元素,第一反應是排序,但陣列基本有序直接排序浪費效能。結合資料的特點前半部分遞增,後半部分遞減,...