leetcode解題之山脈陣列中查詢目標值

2021-10-05 15:14:59 字數 1719 閱讀 5414

(這是乙個 互動式問題 )

給你乙個 山脈陣列 mountainarr,請你返回能夠使得 mountainarr.get(index) 等於 target 最小 的下標

index 值。

如果不存在這樣的下標 index,就請返回 -1。

何為山脈陣列?如果陣列 a 是乙個山脈陣列的話,那它滿足如下條件:

首先,a.length >= 3

其次,在 0 < i < a.length - 1 條件下,存在 i 使得:

a[0] < a[1] < … a[i-1] < a[i]

a[i] > a[i+1] > … > a[a.length - 1]

你將 不能直接訪問該山脈陣列,必須通過 mountainarray 介面來獲取資料:

mountainarray.get(k) - 會返回陣列中索引為k 的元素(下標從 0 開始) mountainarray.length()

注意:對 mountainarray.get 發起超過 100

次呼叫的提交將被視為錯誤答案。此外,任何試圖規避判題系統的解決方案都將會導致比賽資格被取消。

示例 1:

輸入:array =[1

,2,3

,4,5

,3,1

], target =

3輸出:2

解釋:3 在陣列**現了兩次,下標分別為 2 和 5,我們返回最小的下標 2。

示例 2:

輸入:array =[0

,1,2

,4,2

,1], target =

3輸出:-

1解釋:3 在陣列中沒有出現,返回 -

1。

3 <= mountain_arr.length() <= 10000

0 <= target <= 10^9 0 <=

mountain_arr.get(index) <= 10^9*

應為山峰左右都是有序的,所以首先找到山峰值,讓後在山峰的左右使用二分查詢法搜尋目標值

/**

* // this is mountainarray's api inte***ce.

* // you should not implement it, or speculate about its implementation

* inte***ce mountainarray

* public int length() {}

* }*/class

solution

else

if(midvalueelse

}int res =-1

;int nleft =

0,nright=maxvalueindex;

//查詢左山坡

while

(nleft<=nright)

else

if(value>target)

else

}//查詢右山坡

int mleft = maxvalueindex+

1,mright=len-1;

while

(res==-1

&&mleft<=mright)

else

if(value>target)

else

}return res;

}}

山脈陣列 雙指標的解題思想

給定乙個整數陣列 a,如果它是有效的山脈陣列就返回 true,否則返回 false。讓我們回顧一下,如果 a 滿足下述條件,那麼它是乙個山脈陣列 a.length 3 在 0 i a.length 1 條件下,存在 i 使得 a 0 a 1 a i 1 a i a i a i 1 a a.lengt...

leetcode解題之排序陣列

給你乙個整數陣列 nums,請你將該陣列公升序排列。示例 1 輸入 nums 5 2,3 1 輸出 1,2,3,5 示例 2 輸入 nums 5 1,1 2,0 0 輸出 0,0,1,1,2,5 1 nums.length 50000 50000 nums i 50000 主要考察的是排序演算法的基...

leetcode 山脈問題

給定乙個整數陣列 a,如果它是有效的山脈陣列就返回 true,否則返回 false。讓我們回顧一下,如果 a 滿足下述條件,那麼它是乙個山脈陣列 a.length 3 在 0 i a.length 1 條件下,存在 i 使得 a 0 a 1 a i 1 a i a i a i 1 a a.lengt...