【问题标题】:Minimum value to add or subtract to generate a sorted array添加或减去以生成排序数组的最小值
【发布时间】:2014-09-18 01:35:53
【问题描述】:

给定一个整数数组,我想找到最小数字x,这样在数组中的元素增加或减少0x 范围内的数字将导致数组排序按升序排列。

例如,对于[5,4,3,2,8]x 的最小值为3。这是因为[2,3,4,5,8] 可以通过将每个元素增加或减少0,1,23 来获得:

5-3 = 2
4-1 = 3
3+1 = 4
2+3 = 5
8+0 = 8

假设我们有一个更复杂的数组,例如[52,71,36,92,48]。我将如何解决这个问题?

【问题讨论】:

    标签: ruby arrays sorting


    【解决方案1】:
    a = [52, 71, 36, 92, 48]
    b = a.map.with_index{|e, i| e - i}
    ((b.max - b.min) / 2.0).ceil
    # => 28
    

    【讨论】:

    • 我认为通过索引减去数字之间的步骤没有意义。看一个例子:如果a=[3,4,2,5,8,7] 那么b=[3, 3, 0, 2, 4, 2]((b.max - b.min) / 2.0).ceil == 2 这是错误的。只需使用 ((a.max - a.min) / 2.0).ceil 计算中位数。
    • @DavidUnric 为什么错了?您可以在2 中获取[2, 3, 4, 5, 8, 9]。还能做得更好吗?
    • 批评前要三思。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多