[算法]在数组中找到一个局部最小位置

题目

分析

数组里面一定有两个以上元素,而且任意两个相邻数不相等
两头:
一个位置比后一个位置数小,称之为局部最小
一个位置比前一个位置数小,称之为局部最小
中间:
一个位置必须比前一个位置小,也要比后一个位置小,称之为局部最小

形象点理解
两头递增、递减,中间下凹

题目要求只返回一个局部最小的位置就可以了

先看0位置和n-1,有任何一个是直接返回
如果首尾都不是,那中间必然有,为什么呢?因为两头都是往中间递减的,从图像上来看,中间必有局部最小位置

然后此使看mid位置满不满足,满足直接返回,不满足

看两边趋势,如果有向两边的中间递减的趋势,则把范围缩小到那一半;如果两边都有则随便取一边就可以了,说明两边都有满足条件的解

这也是二分查找的思想,变体二分查找

实现

posted @ 2020-02-24 00:06  KrisTse  阅读(361)  评论(0编辑  收藏  举报