在旋转排序数组中找到旋转计数

时间:2018-10-21 23:23:15

标签: arrays algorithm sorting rotation

我有以下问题: 考虑以递增顺序排序的一组不同数字。阵列(顺时针)旋转了k次。给定这样的数组,找到k的值。

我了解这是一个众所周知的问题(网络上对此有一些答案),但是我的问题不是解决该问题的方法。

我在测试中遇到了这个问题,我说这个问题的解决方案可以是:查找小于数组中前辈的第一个数字。我选择这样做的方法是从数组开始以2的幂增加跳跃。我将演示: 假设k = 29 然后我将检查2,4,8,16,32。位置32的值较小,但不是第一个。然后我将从17号位置跳出(上述跳跃):17、19、23、31。31号位置较小,但不是第一个。 下一阶段检查:24、26、30。这次,位置30的值较小,因此首先返回30-1。 (我可以将其写为算法,但是我认为演示清楚了思路)

我的想法是,这将递归起作用,并且肯定会给我答案。 我的讲师对我说我错了。 所以我的问题是我真的错了吗? 其次,我很难找到算法的运行时间。我知道第一次运行的次数最多为O(logk),而其他运行的次数(在子阵列上)较少,但是在最坏的情况下,那是总和。我告诉你一个事实,我一开始认为它仍然是o(logk),但现在我不太确定。

谢谢。

0 个答案:

没有答案