arrays - 在先减后增的数组中搜索

标签 arrays algorithm sorting

我有一个最初按降序排列的数组。 现在我遍历到数组中的一个随机索引,然后我翻转列表,使列表的其余部分变为升序。

现在给定一个数字,需要找到它的索引。 找到给定数字的索引的有效算法是什么?

例如:

初始列表:50 48 21 15 9 8 7 5 3 2 1

在数字 9 处翻转后: 50 48 21 15 1 2 3 5 7 8 9

提供的数量: 21

21 的索引:?

编辑 1: 有趣的是,按降序排列的列表的最小值元素将始终大于按升序排列的列表的最大值元素,因为它最初是列表的一部分按降序排列。

最佳答案

这是this question and answer的倒数, 序列上升然后再次下降。在你的情况下,它先下降然后再上升。

关键是从找到最小元素的索引开始。一旦有了它,就可以在左侧(递减)部分进行二分查找,在右侧(递增)部分进行二分查找。由于二进制搜索可以在对数时间内完成,因此只要您能在对数时间内找到最小元素,就可以在对数时间内完成所有操作。

幸运的是,您还可以使用二分查找来做到这一点。对于您考虑的数组中的任何位置,如果以下元素更大,则您位于右侧(增加)部分;如果它更小,那么你就在左边(递减)部分。这足以让您执行二分搜索以找到最小值。

关于arrays - 在先减后增的数组中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754890/

相关文章:

algorithm - 证明 Big-Theta 符号

php - 动态定价计算,其中每个单位逐渐变得比之前的单位便宜

java 。如何将两个最初排序的队列合并到一个队列中? (没有链表或其他东西)

javascript - 如何使用下划线根据自定义排序顺序对对象数组进行排序

apache-spark - 使用 pySpark 对 RDD 中数组类型的值进行排序

ruby-on-rails - 如何以 Rails 形式提交整数数组?

javascript - 迭代数组

java - 如何在Java中创建通用数组?

python - 如何使用 numpy 保存和读回多维字符串数组(可能)?

algorithm - 消除 "graph"中节点的高效算法?