九章算法面试题33 数组波峰
来源:互联网 发布:小猪cms源码2017 编辑:程序博客网 时间:2024/03/29 05:42
九章算法官网-原文网址
http://www.jiuzhang.com/problem/33/题目
一个数组A[1..n],假设数组中没有任何相邻两数相等,满足A[1]<A[2],A[n-1]>n。A[i]被称为波峰,当且仅当A[i]>A[i-1]并且A[i]>A[i+1]。请找到数组中的一个波峰。假设数组中存在相邻相等的数,该怎么做?
解答
根据条件A[1]<A[2], A[n-1]>A[n]可知A中一定存在波峰。用二分法,选择中点mid, 如果A[mid] 是波峰,则得到结果;如果A[mid]<A[mid-1]则左边一定存在一个波峰;否则A[mid]<A[mid+1],右边一定存在波峰。
面试官角度
这个考察的是二分法。从思考的角度来讲,首先面试者要分析出,题目中所给的几个条件所以代表的意义(A中一定存在波峰),然后通过二分法逐渐缩小可能存在解的区间。答出二分法的解法以后,进一步会问,如果A中的相邻两数可能相等,该怎么做?此时面试者需要从头梳理条件,分析出,A中已经不一定存在波峰了,每次二分以后,也难以每次确定哪边会有波峰。因此,如果相邻两数可能相等,则需要O(n)的算法复杂度来找到A中的波峰。
0 0
- 九章算法面试题33 数组波峰
- 九章算法面试题5 有序数组合并
- 九章算法面试题39 分割数组
- 九章算法面试题84 奇偶分割数组
- 九章算法面试题86 合并排序数组
- 九章算法面试题87 最小子数组
- 九章算法面试题3 找坏球
- 九章算法面试题28 链表找环
- 九章算法面试题71 平方根
- 九章算法面试题74 中位数
- 九章算法面试题31 子数组的最大差
- 九章算法面试题62 合并k个排序数组
- 九章算法面试题83 把0移到数组右边
- lintcode&九章算法——Google 面试题 | 数组的度数 ? 待解决
- 九章算法 | Facebook 面试题 : Backpack VI 背包算法
- 面试题之九章算法 字符串编辑距离
- 九章算法——面试题思路
- 九章算法面试题1 落单的数
- Shell if
- 可是我不愿意陪你做一只蘑菇
- Ubuntu安装搜狗输入法、flashplayer、配置VPN(三)
- LeetCode(Subsets)
- 300个国外优秀网站
- 九章算法面试题33 数组波峰
- 执行SVN up和svn merge等命令出现在首位置的各字母含义以及SVN合并别人的修改
- 利用堆栈进行四则运算
- [LeetCode] Pascal's Triangle II
- lua的面向对象
- 登录远程仓库并创建自己的工程
- 最佳情人
- spring3 的restful API RequestMapping介绍
- maven SpringMVC4 JPA 开发环境的搭建