题解 | #寻找峰值# [P2]

寻找峰值

http://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76


对于i: 
如果i左右相邻的柱子都没i高,那么i就是peak, return i.
如果i右边相邻的柱子比i高,那么i的右侧一定存在peak, binarySearch right
如果i左边相邻的柱子比i高,那么i的左侧一定存在peak, binarySearch left
(如果左右都比i高,两遍都有peak, 随便挑一边search)

why?反证法.比如右边相邻的柱子比i高情况下,假设右边不存在peak, 那么右边必须单调递增。
但是最右边nums[n]=-INFINITE, 所以不可能单调递增 -> 假设不成立。
import java.util.*;

public class Solution {
    public int findPeakElement (int[] nums) {
      int l = 0, r = nums.length;
      // binary search nums[l, r)
      while (l < r) {
        int m= l + ((r-l) >> 1);
        boolean higherThanLeft = m-1 < 0 || nums[m] > nums[m-1];
        boolean higherThanRight = m+1 >= nums.length || nums[m] > nums[m+1];
        if (higherThanLeft && higherThanRight) 
          return m;  // found
        else if (higherThanRight) 
          r = m;  // search left
        else 
          l = m + 1;
      }
      return -1;  // shouldn't get here
    }
}
全部评论

相关推荐

找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务