O(1) 空间和 O(n) 时间内的布尔数组重新排序 Java代码 - 如果您使用的是 - 对象:Boolean[] Java代码 - 如果您使用的是 - 基元:boolean[]
这个问题取自编程访谈的元素:
给定一个包含 n 个具有布尔值键的对象的数组 A,请对数组重新排序,以便首先显示键为 false 的对象。具有 key true 的对象的相对顺序不应更改。使用 O(1) 额外的空间和 O(n) 时间。
我做了以下操作,它保留了具有键 true 的对象的相对顺序,并使用 O(1) 额外的空间,但我相信它的时间复杂度是 O(n*n!)。
public static void rearrangeVariant4(Boolean[] a) {
int lastFalseIdx = 0;
for (int i = 0; i < a.length; i++) {
if (a[i].equals(false)) {
int falseIdx = i;
while (falseIdx > lastFalseIdx) {
swap(a, falseIdx, falseIdx-1);
falseIdx--;
}
lastFalseIdx++;
}
}
}
有人知道如何在O(n)时间内解决它的想法吗?