程式設計師面試金典 面試題 10 03 搜尋旋轉陣列

2022-04-02 02:22:39 字數 753 閱讀 2896

搜尋旋轉陣列。給定乙個排序後的陣列,包含n個整數,但這個陣列已被旋轉過很多次了,次數不詳。請編寫**找出陣列中的某個元素,假設陣列元素原先是按公升序排列的。若有多個相同元素,返回索引值最小的乙個。

示例1:

輸入: arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 5

輸出: 8(元素5在該陣列中的索引)

示例2:

arr 長度範圍在[1, 1000000]之間

這道題做了很久,也看了一些人的答案,很多答案雖然看似二分,實際上還是在遍歷陣列。目前得到的最好的做法就是以左邊區間是否有序為條件,來判斷target值在哪個區間出現,進而減少搜尋的空間。

不過當[5,5,5,5,5,2,3,4,5]或[5,2,3,4,5,5,5,5,5]如果搜尋2的話。是最壞的情況,無法根據陣列有序的條件判斷出2在哪個區間,因為左右兩個區間的邊界也都為5。

具體思路寫在程式的注釋中了。

class

solution

private

int binarysearch(int arr, int target, int l, int

r)

int mid = l + (r - l) / 2;

//如果左區間為公升序的話

if(arr[l] else

if(arr[l] > arr[mid])

else

}}

程式設計師面試金典 面試題 08 09 括號

括號。設計一種演算法,列印n對括號的所有合法的 例如,開閉一一對應 組合。說明 解集不能包含重複的子集。例如,給出 n 3,生成結果為 dfs搜尋,如果當前左括號用超了,右括號用超了,或者右括號的數量大於左括號的數量直接返回。而如果左右括號剛好用盡,代表生成乙個結果,記錄下來。然後就是遞迴,新增左括...

程式設計師面試金典 面試題 08 13 堆箱子

堆箱子。給你一堆n個箱子,箱子寬 wi 高hi 深di。箱子不能翻轉,將箱子堆起來時,下面箱子的寬度 高度和深度必須大於上面的箱子。實現一種方法,搭出最高的一堆箱子。箱堆的高度為每個箱子高度的總和。輸入使用陣列 wi,di,hi 表示每個箱子。示例1 輸入 box 1,1,1 2,2,2 3,3,3...

程式設計師面試金典 面試題 05 08 繪製直線

繪製直線。有個單色螢幕儲存在乙個一維陣列中,使得32個連續畫素可以存放在乙個 int 裡。螢幕寬度為w,且w可被32整除 即乙個 int 不會分布在兩行上 螢幕高度可由陣列長度及螢幕寬度推算得出。請實現乙個函式,繪製從點 x1,y 到點 x2,y 的水平線。給出陣列的長度 length,寬度 w 以...