原谅我,但我很困惑,我找不到任何指向正确方向的消息来源。
给出n个元素的列表:
[3, 6, 5, 1]
将值减小到不大于列表大小的同时保持优先级值相对于彼此(按原始顺序)。
约束:
我试图远离排序和创建新列表,但是就地修改列表。
我的预期结果应该是:
[1, 3, 2, 0]
是否存在针对此问题的算法?
答案 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)。
对阵列的每个索引执行这些步骤。至于订单,不要交换任何索引,因为您必须保留原始订单。希望有所帮助!