您的位置:首页 > 其它

二分法(并非要排好序才做二分)

2015-08-26 09:42 225 查看
题目:找出数组的局部最小。

内容:定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果
arr[0]<arr[1],那么arr[0]是局部最小;如果arr[N-1]<arr[N-2],那么arr[N-1]是局部
最小;如果0<i<N-1,既有arr[i]<arr[i-1]又有arr[i]<arr[i+1],那么arr[i]是局部最小。
给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任
意一个局部最小出现的位置即可。

思路:一般解法为遍历整个数组,找出最小值,时间复杂度为O(n)。其实这并不是最优解,

可先定义两个边界为arr[0],arr[N-1],判断是否为局部最小,若是局部最小则返回;若不是,

则在中间位置判断该值是否为局部最小,若不是,则根据情况重新设置边界。

总结:二分法并非一定要排好序的数组,而是确定在某个范围内一定有解或一定无解,以此缩小范围,节省时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: