題目:把乙個有序陣列的末尾幾位移到最開始的位置形成的新的新陣列成為旋轉陣列,找出陣列的最小值。
自己思路:
查詢的話離不開遍歷,二分,雜湊,二叉搜尋樹。這題用遍歷可以解決,但是太耗費時間了。旋轉陣列的特點:前面的有序序列必然大於後面的有序序列(假設陣列之前是公升序排列),可以根據二分進行查詢。
**:二分查詢的遞迴實現:
#include
using
namespace std;
intbinary
(int temp,
int bin,
int end);if
(temp[mid]
>temp[bin]
)else;}
;int
main()
; cout<<
binary
(a,0,4
)
};
二分查詢的while迴圈實現:
#include
using
namespace std;
// int binary(int temp, int bin, int end);
// if(temp[mid]>temp[bin])
// else;
// };
intbinary
(int temp,
int bin,
int end)
else
}return temp[end];}
intmain()
; cout<<
binary
(a,0,4
)
};
**優化,如果出現特殊情況應該怎麼考慮
1、陣列直接是有序的,旋轉移動情況是0。
思路:判斷陣列的中間值是否大於第乙個值並且小於最後乙個值。加個if判斷就可以了。
2、陣列的值存在重複
思路:沒辦法,只能順序查詢。
劍指offer面試題11 旋轉陣列的最小值
題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列的乙個旋轉,該陣列的最小值為1 通過分析這個旋轉陣列的特性我們可以發現,旋轉後的陣列實際上可以分為兩組子陣列,前者的所有元素均大於後者的所有元素。我們還可以注意到,...
面試題8 旋轉陣列中的最小值
直接遍歷一遍陣列,找出最小值,時間複雜度為o n 但是這不是面試官想要的答案 看到排序好的陣列,可以想到用二分查詢!二分查詢的時間複雜度是o logn 前半部分陣列總是大於後半部分陣列,而最小值就是它們的臨界點!public class test08 的乙個旋轉,該陣列的最小值為 param num...
劍指offer 面試題8 旋轉陣列的最小值
package chapter2 面試題8 旋轉陣列的最小值 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。public class 08 rotatearray int arr...