/*把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減序列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。
* 思路:直觀解法 ,從頭到尾遍歷,找最小值 o(n).
* 第二種思路:旋轉後的數字實際可以劃分成兩個排序的子陣列。而且前面的子陣列的元素大於等於後面子陣列的元素。並且最小的元素剛好是這兩個陣列的分界線。本題給出的陣列在一定程度上是有序的,
* 兩個指標,分別指向第乙個元素left和最後乙個元素right。第乙個指標順序查詢,如果第乙個元素大於最後乙個元素,則left++,直到小於或等於最後乙個元素,返回array[left],但時間複雜度也是o(n).
* 下面我們可以用二分查詢(o(lgn))的思路去找最小元素.
* 用兩個指標分別指向陣列的第乙個元素和最後乙個元素。第乙個元素應該是大於或等於最後乙個元素的。(並不完全對,還有特例,當旋轉0個數字時,即沒有旋轉12345 返回第乙個數字1。)
* 接著我們找陣列中間的元素,如果中間元素位於前面的遞增陣列,那麼他應該大於或等於第乙個指標指向的元素。 此時,最小元素應該位於該中間元素後面
* 我們把第乙個指標指向該中間元素。 移動以後的第乙個指標仍然位於前面的遞增子陣列中。 移動以後的第二個指標仍然位於後面的遞增子陣列中。
public int minnumberinrotatearray1(int array)
if(array.length==1)
int left=0;
int right=array.length-1;
while(array[left]>=array[right])
return array[left];
}
或者二分查詢
public int minnumberinrotatearray(int array)
int low=0;//第乙個指標
int high=array.length-1;//第二個指標
int mid=low; ///當旋轉0個數字時,即沒有旋轉12345 返回第乙個數字1。其他情況都是array[low]>=array[high]
//low在前乙個排好序的部分。high在後乙個排好序的部分
while(array[low]>=array[high])
mid=(low+high)/2;
//如果三個數都相等,則需要順序排序,從頭到尾找最小的值
if(array[low]==array[mid] &&array[high]==array[mid])
//如果中間位置對應的值在前乙個排好序的部分,將low設為新的處理位置。
if(array[mid]>=array[low])else if(array[mid]<=array[high])
} return array[mid];
}private int mininorder(int array, int low, int high)
} return result;
}
如何陣列旋轉
print rotate matrix intmatrix,int n 該方法用於將乙個nn的二維陣列逆時針旋轉45度後列印。下圖顯示乙個33的二維陣列及其旋轉後螢幕的效果。從右上角對陣列中的元素進行輸出。package lock public class t10 system.out.printl...
LeetCode 陣列 旋轉陣列
給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 輸入 1,2,3,4,5,6,7 和 k 3 輸出 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,1,2,3,4 ...
leetcode 實現陣列的旋轉
給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 1 input 1,2,3,4,5,6,7 和k 3 output 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,...