【兩次過】Lintcode 585. 山脈序列中的最大值
阿新 • • 發佈:2018-12-24
給 n
個整數的山脈陣列,即先增後減的序列,找到山頂(最大值)
樣例
給出陣列為 [1, 2, 4, 8, 6, 3]
,返回 8
給出陣列為 [10, 9, 8, 7]
,返回 10
解題思路:
與Lintcode 75. 尋找峰值類似,典型的二分搜尋,注意迴圈跳出條件,因為mid的值總會偏向左方,所以大膽l = mid + 1;總會遍歷到這個值的。
public class Solution { /** * @param nums: a mountain sequence which increase firstly and then decrease * @return: then mountain top */ public int mountainSequence(int[] nums) { // write your code here if(nums==null || nums.length == 0) return 0; int l = 0; int r = nums.length - 1; while(l+1 < r){ int mid = l + (r-l)/2; if(mid-1>=0 && mid+1<nums.length //頂峰 && nums[mid] > nums[mid-1] && nums[mid] > nums[mid+1]) return nums[mid]; else if(mid+1<nums.length && nums[mid] < nums[mid+1]) //上坡 l = mid + 1; else //下坡 r = mid; } return nums[l]; } }