列表值减少算法

时间:2013-10-08 23:04:30

标签: algorithm list mutation

原谅我,但我很困惑,我找不到任何指向正确方向的消息来源。

给出n个元素的列表:

[3, 6, 5, 1]

将值减小到不大于列表大小的同时保持优先级值相对于彼此(按原始顺序)。

约束:

  • 必须维持订单
  • 元素是> = 0
  • 不同的值

我试图远离排序和创建新列表,但是就地修改列表。

我的预期结果应该是:

[1, 3, 2, 0]

是否存在针对此问题的算法?

2 个答案:

答案 0 :(得分:1)

您可以在O(n ^ 2)中执行此操作。

只需浏览n次列表,每次将最小元素(>= i)设置为i,其中i从0开始,递增到{{ 1}}

我怀疑你正在寻找比这更好的东西,但我不确定你能在原地做得多好。

示例:

n-1

注意:这假设元素为Input: 3 6 5 1 3 6 5 0* 1* 6 5 0 1 6 2* 0 1 3* 2 0 且不同

答案 1 :(得分:0)

可能有一个,但如果您考虑解决此问题所需的步骤,则不需要它。

首先,您知道数组中的每个值都不能大于4,因为这是此特定示例中的大小。

您需要遍历数组中的每个数字并使用if条件检查以查看数字是否更大;如果它是那么你需要递减它,直到它满足正确的条件(在这种情况下,它小于4)。

对阵列的每个索引执行这些步骤。至于订单,不要交换任何索引,因为您必须保留原始订单。希望有所帮助!