use*_*335 5 string algorithm bit-manipulation c++14
您有一个由字符“ 0”和“ 1”组成的字符串。考虑该序列为“ 01011010”。如果0后跟1,则交换0和1的位置。输出序列的第n个遍。
这似乎是修改后的冒泡排序,我们需要输出第n个通过。我的算法:
while (pass != 0)
begin
bool x = false;
int prev = ?;
for (int i = 0; i < string_length; i++)
begin
if (prev == 0) then
switch (string[i])
case 0:
break;
case 1:
string[i] = 0;
string[i-1] = 1;
prev = ?;
x = true;
break;
else
prev = string[i];
end if
end
if (!x)
break;
pass = pass - 1;
end
Run Code Online (Sandbox Code Playgroud)
输出正确,但是算法效率不高。最坏的情况仍然是O(n ^ 2)。有人可以帮助我减少时间复杂度吗?
谢谢!