你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
LeetCode[Array]: Find Peak Element
 

A peak element is an element that is greater than its neighbors.
Given an input array where num[i] ≠ num[i+1], find a peak element and return its index.
You may imagine that num[-1] = num[n] = -∞.
For example, in array [1, 2, 3, 1], 3 is a peak element and your function should return the index number 2.
Note:
Your solution should be in logarithmic complexity.

这个题目要求时间复杂度为O(log(N)),可以利用二分查找来做,只是这里更新搜索区间的时候不太一样:如果到mid的前一步是上坡而mid的下一步是下坡,那么mid即是山顶;如果mid的前一步和后一步都是上坡,那么山顶必然位于后半区间;如果mid的前一步和后一步都是下坡,那么山顶必然位于前半区间。除此之外,还需要处理边界问题。

我的C++代码实现如下:

int findPeakElement(const vector &num) {
    int low = 0, high = num.size() - 1;
    while (low <= high) {
        int mid  = (low + high) >> 1;
        bool isUphillForward = (mid == 0 ? true : num[mid] > num[mid - 1]);
        bool isUphillAfter = (mid == num.size() - 1 ? false : num[mid + 1] > num[mid]);

        if (isUphillForward && !isUphillAfter) return mid;
        else if (isUphillForward && isUphillAfter) low = mid + 1;
        else high = mid - 1;
    }

    return low;
}

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089