双色抖动
我有一个包含
0
s和1
s混合的数组。我想重新排列数组的内容,以便数组中的偶数位数包含0
和奇数位置尽可能包含1
,但受限于0
s和1
s的数量不变。这意味着如果0
s的数量超过1
s的数量,反之亦然,那么在重新排列的数组的末尾会有一个块,包括all-0
s或all-1
s。如何在一次通过中修改阵列?
例如:
Input: {0,1,1,0,1,0,1,0,1,1,1,0,0,1,0,1,1}
Output: {0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1}
没有找到相关结果
已邀请:
9 个回复
拟僚疽刊剔
成为(假设
是偶数):
梆晨灸碾
凄嘛姥
之前的所有内容都已排序。
是应放置在
的元素的颜色。
和
之间的所有颜色都相同。 数组是它自己的排列。 无论如何,它似乎工作。
姬第柔炒
久纳禾澎
你可以在偶数位置和
你可以在奇数位置。你不需要“紧凑”它们。做它“压缩”有点复杂。
我保留了一堆赔率和一堆需要移动的偶数元素,当我需要奇数/偶数时我会使用它们。两个堆栈保留在输入数组中,因此没有额外的空间(两个堆栈的两个“头”除外,这是两个额外的整数)。我认为最坏的情况是时间为
(例如,所有元素都是
,一半元素被“放入”堆栈然后需要重置,因为没有空白空间),并且
为空间。 输出:
镰茧钩
和
,它们保存下一个
或
放置在数组中的位置。
将用于遍历数组。
田眯衅
骨酚柯
很容易理解为什么它是正确的所以我不会解释。时间复杂度:O(arr.length())或O(n)
屡倒雷图