Pop*_*orn 5 arrays sorting algorithm performance list
问题:给定一个整数数组,找到最小缓冲区值,以便可以按严格递增的顺序对数组进行排序.数组中的每个元素都可以加上或减去缓冲区值.
Ex: [4, 0, 9, -2]
Run Code Online (Sandbox Code Playgroud)
最小缓冲区值为6,因为您可以将数组更改为:
[4 - (6 or 5 or 4 or 3), 0 + (-1 or 0 or 1 or 2), 9 - (6) = 3, -2 + (6) = 4]
Run Code Online (Sandbox Code Playgroud)
我相信我有一个解决方案可以使用O(N ^ 2),但我想知道我是否可以做得更好.
编辑:没关系,我的解决方案不起作用.
我的解决方案
对于每个元素,绘制一条斜率为1的线,通过该元素.找到允许每个元素移动到线上的最小缓冲区值.跟踪获得的缓冲区值,并在最后返回最小的缓冲区值.
谢谢
O(n)
可以通过逐一循环数组并保持不变式正确并跟踪当前缓冲区大小来实现:
abs((curr-prev)/2) + 1
当前缓冲区)以及先前/当前值(尽可能的最小值)。此时,我们不需要关心较早的条目,因为由于我们正在增加缓冲区以减少先前/当前的值,因此我们可以简单地abs((curr-prev)/2) + 1
从每个先前的值中减去 ,并且不变量将保持不变。一些示例可以使其更加清晰(粗体 - 当前,斜体 - 先前):
一)输入:[4,0,9,-2]
完成,缓冲区 = 6
II) 输入:[40, 31, 140, 131]
完成,缓冲区 = 5
III) 输入:[1,1,1,1]
完成,缓冲区 = 2
IV) 输入:[7,11,1,2,3]
完成,缓冲区 = 6
五)输入:[0,1,3,-15]
直到 [0,1,3] 没有任何改变
完成,缓冲区 = 10
六)输入:[1,2,3,4]
完成,缓冲区 = 0
归档时间: |
|
查看次数: |
179 次 |
最近记录: |