陣列的旋轉

2021-07-11 09:10:10 字數 1568 閱讀 7338

/*把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減序列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為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,...