(這是乙個 互動式問題 )給你乙個 山脈陣列 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...