【问题标题】:Insert Int in Array in Numerical Order [duplicate]按数字顺序在数组中插入 Int [重复]
【发布时间】:2017-05-27 23:50:03
【问题描述】:

这是一个小数学/编码问题。

我正在尝试找出在 Int 数组中插入 Int 的最佳方法,以使数组按数字顺序最低到最高的正确索引。

一种方法是循环遍历数组,只要索引 +1 > 我的数字而不是在索引处插入它。

我想知道是否有任何快速的方法。

类似:

let index = array.index(where: { ($0 < number && $1 > number) } )

我不能在闭包中添加两个参数...

有什么想法吗?

【问题讨论】:

  • 不是真正的“Swifty”方法,但您可以使用NSOrderedSet,假设您的号码是唯一的。
  • 为什么不直接将它添加到数组中,而不是删除数组?就性能而言,这不应该比找到正确的索引并将其插入那里更糟糕,因为必须移动更高索引处的所有值。
  • 从算法上讲,您需要通过二分搜索找到插入点。这样,如果您的数组有 1024 个项目,则您可以通过 ~10 比较来识别插入点,而如果您按顺序搜索,则平均为 512。

标签: arrays swift sorting


【解决方案1】:

只要数组开始为空或保持排序,下面的代码就可以将新数字插入到正确的位置:

var ints = [3,6,9,15,20]
var num = 12
ints.insert(num, at: ints.index(where: {$0 > num}) ?? ints.endIndex)
print(ints)

num = 2
ints.insert(num, at: ints.index(where: {$0 > num}) ?? ints.endIndex)
print(ints)

num = 24
ints.insert(num, at: ints.index(where: {$0 > num}) ?? ints.endIndex)
print(ints)

输出:

[3、6、9、12、15、20]
[2、3、6、9、12、15、20]
[2、3、6、9、12、15、20、24]

显然,您希望将其制成一个函数或将其放在扩展中,这样您就不需要重复同一行。

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 2020-01-28
    • 2013-12-18
    • 2013-10-27
    • 2011-08-31
    • 2018-08-11
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多