对数组排序与线性时间和恒定的空间在替换位置的两个已排序的序列

Antariksha Yelkawar:

这是今天问我在接受采访时,并在问题盯着5分钟之后被踢出。

给定的阵列使得所有奇数位置([的亚序列135,...])和所有偶数位置的子序列([ 246,...])是每按排序顺序-例如,[1,7,2,8,3,9,4,10,5]或[3,8,4,11,5]或[5,2,7,4] -排序在O(ñ)时间和O(1)空间(包括堆栈空间和输出阵列的空间)。

我已经绞尽脑汁想,拿起我的朋友在这最后两个小时。谷歌没有取得任何答案。我不想颜色的任何意见,但我觉得这可能无法在给定的复杂性来解决。

我们怎样才能解决这个问题?所有输入都理解的。

吉拉德巴坎:

如果(1)的两个交错序列可形成一个单调序列时未交织,并且或者(a)所述阵列具有最低数目的开始和为奇数的长度,或(b)具有最低数目的第二阵列开始序列(一个将是右侧时未交错),并且是偶数长度,我们可以能够扭转算法描述下一个简单的原地算法用于在洗牌(Peiyush耆那,2008年)

我们将不得不进行“周期前导”序列第一,其次是周期变化。

实施例1

[1, 7, 2, 8, 3, 9, 4, 10, 5]
 1  2  3  4  5  6  7   8  9
 1  6  2  7  3  8  4   9  5

|1| unaffected

   |1     3                |
   m = 4; 2m = 3^2 - 1
   cycles start on 3^0, 3^1
   (4 swaps with 7 and the other
    numbers form a longer cycle.)

实施例2(简单):

[1, 5, 2, 7, 3]
 1  2  3  4  5
 1  4  2  5  3

|1| unaffected

   |          |
   m = 1
   cycle in 2m => 2, 5
   cycle in 2m => 3, 7
   cycle shift by m between 5 and 3
   => 2, 3, 5, 7

我不希望任何人想出这个在接受采访时没有被允许研究,虽然:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

证明:使用线性时间和恒定空间检查两个整数数组是否彼此置换

在对数时间内找到两个排序数组的中位数

按角度的两个属性对数组进行排序

用两个键对数组排序

在两个条件下对数组进行排序

按两个条件对数组进行排序

给定两个未排序的数组,找到对数,其中A [i]> X和B [i]> Y

在 O(n) 中对两个数组进行排序(时间和空间)

如何在java和python中以恒定时间对数组进行排序?

如何合并两个已排序的数组?

您如何正确合并两个已排序的数组?

组合两个不同的数组列表并根据时间排序

给定两个未排序的数组 A 和 B ,通过只对数组中的一个进行排序,找到总和(或差)等于给定 k 的一对元素

合并两个已排序的链表

合并两个已排序的链表

如何按这些数组的两个元素对数组进行排序?

如何基于python中的两个条件对数组进行排序

根据两个属性的值对数组中的对象进行排序

使用两个条件对数组进行自定义排序

根据两个键值按ASC顺序对数组进行排序?

JavaScript-按两个整数属性对数组进行排序

使用usort()对数组进行排序时,是否可以设置两个起始值?

两个应该作用相同的代码对数组进行排序,不要

通过两个不同的条件对数组中的对象进行排序

如何使用 MergeSort 按两个或多个条件对数组进行排序?

按两个不同的顺序对数组进行排序,而不使用内置方法

在Java中实现可比较项的两个已排序列表之间的差异

按两个字段对数组进行排序

自定义排序(usort)/按两个值对数组排序后,按多维索引数组中的数组值按字母顺序排序