面試題11 旋轉陣列的最小數字

2021-09-22 17:59:30 字數 848 閱讀 2922

把乙個陣列最開始若干個元素搬到陣列的末尾

一般方法遍歷,o(n)

將這個陣列看作是兩個排序陣列

利用二分查詢的思想,比較中間的數字與兩頭;

如果中間元素位於第乙個遞增陣列,大於/等於第乙個指標,範圍:右邊

如果中間元素位於後面遞增陣列,它應該小於/等於第二個指標:左邊

注意改變後指向中間元素

最後結果是兩個指標距離為1,答案是後乙個指標、

int min(int *numbers, int length)

else if(numbers[mid]<=numbers[q])

}return numbers[q];

}

但是要注意,如果mid、p、q所指相同,只能進行順序查詢

旋轉陣列

給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。

三次reverse

class solution 

};

執行用時 : 36 ms, 在rotate array的c++提交中擊敗了54.82% 的使用者

記憶體消耗 : 9.7 mb, 在rotate array的c++提交中擊敗了10.88% 的使用者

搜尋旋轉排序陣列

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。

搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。

你可以假設陣列中不存在重複的元素

同二分法

面試題11 旋轉陣列的最小數字

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。解題思路 輸入的陣列為非減排序陣列的旋轉,陣列分為兩個排好序的陣...

面試題11 旋轉陣列的最小數字

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。類似二分查詢,旋轉陣列由兩個有序陣列組成 class solut...

面試題11 旋轉陣列的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1。示例 1 輸入 3,4,5,1,2 輸出 1 示例 2 輸入 2,2,2,0,1 輸出 ...