lintcode 75 Find Peak Element
Hi 大家,这道题是lintcode上的find peak element的题,不是leecode的那道,
这两道题是有区别的,这道题的题目中说明了:只有左右两侧的数都小于某个元素,这种才是峰值,
而leetcode的题,是只要找到个最大值就行,可以是[1,2]这种。
There is an integer array which has the following features:
- The numbers in adjacent positions are different.
- A[0] < A[1] && A[A.length - 2] > A[A.length - 1].
We define a position P is a peek if:
A[P] > A[P-1] && A[P] > A[P+1]
Find a peak element in this array. Return the index of the peak.
Example
Given [1, 2, 1, 3, 4, 5, 7, 6]
Return index 1 (which is number 2) or 6 (which is number 7)
分析:
你给出一个整数数组(size为n),其具有以下特点:
- 相邻位置的数字是不同的
- A[0] < A[1] 并且 A[n - 2] > A[n - 1]
假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。
给出数组[1, 2, 1, 3, 4, 5, 7, 6]返回1, 即数值 2 所在位置, 或者6, 即数值 7 所在位置.
要找峰值,要分析每个点有哪几种情况,每个只有四种情况,
(1)在某个峰值
(2)在某个上升区间
(3)在某个下降区间
(4)在一个谷底,比左右两边的元素都小。
首先我们可以确定的是,第一个元素和最后一个元素不可能构成一个峰值,因为峰值要求某个值要同时大于左右两侧的数。
限定了start和end的范围,这道题我们用二分法解决。
第三个条件选择里 else{ start = mid} 也可以是 end = mid。
class Solution {
    /**
     * @param A: An integers array.
     * @return: return any of peek positions.
     */
    public int findPeak(int[] A) {
        int start = 1, end = A.length-2; // 1.答案在之间,2.不会出界
        while(start + 1 <  end) {
            int mid = start + (end - start) / 2;
            if(A[mid] < A[mid - 1]) {
                end = mid;
            } else if(A[mid] < A[mid + 1]) {
                start = mid;
            } else {
                start = mid;
            }
        }
        if(A[start] < A[end]) {
            return end;
        } else {
            return start;
        }
    }
}
lintcode 75 Find Peak Element的更多相关文章
- (二分查找  拓展) leetcode 162. Find Peak Element && lintcode 75. Find Peak Element
		A peak element is an element that is greater than its neighbors. Given an input array nums, where nu ... 
- 75. Find Peak Element 【medium】
		75. Find Peak Element [medium] There is an integer array which has the following features: The numbe ... 
- lintcode : find peak element 寻找峰值
		题目 寻找峰值 你给出一个整数数组(size为n),其具有以下特点: 相邻位置的数字是不同的 A[0] < A[1] 并且 A[n - 2] > A[n - 1] 假定P是峰值的位置则满足 ... 
- [LintCode] Find Peak Element 求数组的峰值
		There is an integer array which has the following features: The numbers in adjacent positions are di ... 
- Lintcode: Find Peak Element
		There is an integer array which has the following features: * The numbers in adjacent positions are ... 
- 【Lintcode】075.Find Peak Element
		题目: There is an integer array which has the following features: The numbers in adjacent positions ar ... 
- [LeetCode] Find Peak Element 求数组的局部峰值
		A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ... 
- LeetCode 162 Find Peak Element
		Problem: A peak element is an element that is greater than its neighbors. Given an input array where ... 
- Find Peak Element
		A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ... 
随机推荐
- 在VS中向命令行添加参数的方法
			在VS中向命令行添加参数的方法 在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入 ... 
- hdu 1873 看病要排队(优先级队列)
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 题目大意: 三个医生看病,病人排队看病,病人有优先级,优先级高的提前看病,同样的优先级按先后.I ... 
- Red Black Tree in C
			http://web.mit.edu/~emin/www.old/source_code/red_black_tree/index.html 
- Visual Studio示例代码浏览器
			https://visualstudiogallery.msdn.microsoft.com/4934b087-e6cc-44dd-b992-a71f00a2a6df 
- struts2基础篇(1)
			一.Struts2简介Struts2以WebWork优秀的设计思想为核心,吸收了Struts1的部分优点,建立了一个基于WebWork和Struts1的MVC框架. 二.搭建Struts2开发环境2. ... 
- 柱状堆积图Echarts
			Map<String,Object> map = new HashMap<String, Object>(); //图例的千人.双百 HashMap<String, St ... 
- cmd /c和cmd /k 解释,附★CMD命令★ 大全
			cmd /c和cmd /k http://leaning.javaeye.com/blog/380810 java的Runtime.getRuntime().exec(commandStr)可以调用执 ... 
- JS的splice()方法和slice()方法
			在w3c school中描述如下: 定义和用法splice() 方法用于插入.删除或替换数组的元素.语法arrayObject.splice(index,howmany,element1,....., ... 
- 多线程 GET
			iOS中多线程的实现 方案 简介 语言 线程生命周期 使用频率 pthread 一套通用的多线程API 适用于 Unix / Linux / Windows 等系统 跨平台\可移植 使用难度大 C 程 ... 
- HTML5+学习笔记2-------边看代码边研究貌似还是有点问题...还在研究中api中
			// 拍照 function getImage() { outSet( "开始拍照:" ); var cmr = plus.camera.getCamera(); cmr.capt ... 
