我很快就要参加我的数据结构课程的考试了。为了做好准备,我正在查看我在网上找到的一些基于算法的问题,并遇到了一个我似乎无法解决的问题。
你走进一个房间,看到一排 n 张牌。每个都写有一个数字 xi,其中 i 的范围从 1 到 n。然而,最初所有的牌都是面朝下的。你的目标是找到一个局部最小值:即一张卡片 i 的数量小于或等于其邻居的数量,xi-1 >= xi <= xi+1。第一张和最后一张牌也可以是局部最小值,它们只有一个邻居可以比较。显然可以有许多局部最小值,但您只负责找到其中一个。
我能想出的唯一解决方案基本上是将它们全部翻转并找到任何局部最小值。然而,挑战在于仅通过翻转 O(logn) 卡来做到这一点。
本质上,如果你看到一张卡片“7”,如果左边的卡片是“10”而右边的卡片是“9”,那么它就是局部最小值。这如何在登录时间内轻松完成?
任何帮助表示赞赏,谢谢。