九章算法官网-原文网址
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中的波峰。
时间: 2024-10-12 05:37:10