以特定顺序排列数组中的元素

灵巧的

在Careercup上找到此面试问题

给定一个具有n个整数的数组A。重新排列数组,使A [0] <= A [1]> = A [2] <= A [3]> = A [4] <= A [5],依此类推

编辑:数组未排序,您必须在线性时间O(N)中进行操作

我无法在线性时间内找到解决方案,我得到的最接近的是对数组进行排序,然后重新排列元素。有人知道如何在线性时间内完成吗?甚至可以在线性时间内完成吗?

我提出的解决方案是按nlogn的时间对数组进行排序,然后用i-1和i + 1重新排列每个奇数元素i。

卢卡·安格莱蒂(Luca Angeletti)

您可以使用此函数(代码在Swift中)在时间O(n)中以Wave形式排列数组

func wave(inout list: [Int]) {
    let evenIndexes = (0..<list.count).filter { $0 % 2 == 0 }

    for index in evenIndexes {
        if index > 0 && list[index] > list[index-1] {
            swap(&list[index], &list[index-1])
        }

        if index < list.count - 1 && list[index] > list[index+1] {
            swap(&list[index], &list[index+1])
        }
    }
}

此解决方案基于此处描述的算法

测试

var test0 = [1,2,3,4,5,6]
wave(&test0)
print(test0) // [1, 3, 2, 5, 4, 6]

var test1 = [4, 6, 2, 1, 3, 7]
wave(&test1)
print(test1) // [4, 6, 1, 3, 2, 7]

var test2 = [20, 9, 4, 2, 0]
wave(&test2)
print(test2) // [9, 20, 2, 4, 0]

时间复杂度

该函数已for loop执行n / 2次(仅对于偶数索引)。因此for循环具有时间复杂性O(n)

在内部,for loop我们找到了两个if then语句,它们都是在常量时间内执行的O(1)

因此,时间复杂度是O(n) * O(1) = O(n)其中n是输入数组中元素的数量。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何投列表与数组中的元素的特定顺序的排列

使用Stream API从HashMap创建具有按特定顺序排列的元素的列表

即使用户输入在Java中按时间顺序排列,也如何遍历数组

如何使用jQuery以与数组相同的顺序排列html元素?

按顺序排列数组变量

数组公式如何与等级配合使用?按顺序排列,无重复,按顺序排列

使用python中的决胜球按顺序排列2D数组中的值

如何在python中过滤出未按特定顺序排列的数组元素

根据熊猫中的顺序排列分数

聚合算法以特定顺序排列数组

如何在每次出现特定元素之间按字母顺序排列列表元素?

在python中按顺序排列打印

c ++-按特定顺序排列矢量元素

跨度元素未按预期顺序排列

C按字母顺序排列的数组

PHP-对数组进行重新排序(如果它包含特定值)并且这些数组按特定顺序排列

PHP数组按desc顺序排列

以奇数顺序排列

根据文件名中的编号以特定顺序排列cat文件

Highcharts中的数据未按顺序排列

在php中按顺序排列和排列?

在特定文件夹中按数字顺序排列文件

如何在apache poi中检查excel列标题是否按特定顺序排列

如何在 google doc 的 google 脚本中替换按字母顺序排列的所有元素

以特定顺序排列的 Javascript 数组,将 0 添加到无值

对数组进行排序,直到 3 个元素按顺序排列,其余保持原样

如何按 r 中特定分组变量级别的特定顺序排列数据行

按字母顺序排列多个数组元素

使用数组以 ASCII 顺序排列 txt 文件中的行并显示它们