- 題目:
這是一個 交互式問題 )
給你一個 山脈數組 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 次調用的提交將被視爲錯誤答案。此外,任何試圖規避判題系統的解決方案都將會導致比賽資格被取消。
爲了幫助大家更好地理解交互式問題,我們準備了一個樣例 “答案”:https://leetcode-cn.com/playground/RKhe3ave,請注意這 不是一個正確答案。
- 示例:
輸入: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。
- 我的解:
/**
* // This is the MountainArray's API interface.
* // You should not implement it, or speculate about its implementation
* function MountainArray() {
* @param {number} index
* @return {number}
* this.get = function(index) {
* ...
* };
*
* @return {number}
* this.length = function() {
* ...
* };
* };
*/
/**
* @param {number} target
* @param {MountainArray} mountainArr
* @return {number}
*/
var findInMountainArray = function(target, mountainArr) {
var start = 0;
var end = mountainArr.length()-1;
var mid = start+Math.floor((end-start)/2);
while(start<=end){
if(mountainArr.get(mid)<=mountainArr.get(mid+1)) {
start = mid + 1
}else {
end = mid - 1
}
mid = start+Math.floor((end-start)/2);
}
var index = -1
index = binarySearch(mountainArr, target, 0, start, true)
index == -1 ? index = binarySearch(mountainArr, target, start, mountainArr.length()-1, false) : ''
return index
};
var binarySearch = function(mountainArr, target, start, end, isUp) {
var mid = start + Math.floor((end-start)/2);
while(start<=end){
var midNum = mountainArr.get(mid)
if(midNum == target) return mid;
if(midNum < target) {
isUp ? start = mid + 1 : end = mid - 1
}else {
isUp ? end = mid - 1 : start = mid + 1
}
mid = start + Math.floor((end-start)/2);
}
return -1
}
- 結果:
原題地址:https://leetcode-cn.com/problems/find-in-mountain-array/