微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

最终位移的总和以零开头的字符串 + 以 1 开头的字符串如何始终等于 num_zeroes * num_ones?

如何解决最终位移的总和以零开头的字符串 + 以 1 开头的字符串如何始终等于 num_zeroes * num_ones?

this problem 之后,一些解决方案使用以下事实来找到反向分组,其中我们在 0s 之前先有 1s (10111000 -> 11110000)。

“事实上,最终位移的总和(以全零开始与结束)将始终等于 num_zeroes * num_ones。”

我可以直观地看出这是如何工作的,但很难看出这在所有情况下都如何。

解决方法

“反转”是无序的一对。在只包含 0 和 1 的字符串中,反转是 0-1 对,其中 1 在 0 之前。

有 (num_zeros * num_ones) 0-1 对,无论数字的顺序如何。如果所有 1 都在所有 0 之前,那么 all 这些对都是反转.如果所有 0 先出现,则 没有 是反转。

只要您从不交换相同的元素(这有什么意义?),相邻元素的每次交换都会改变 一对 0-1 对的顺序。因此,反转的数量将增加或减少 恰好 1。

因此,将所有零放在首位所需的相邻交换数是反转数。每次交换都会修复一个反转,当没有剩余时你就完成了。

将所有 1 放在首位所需的相邻交换次数为 num_zeros * num_ones - num_inversions。每次交换都会创建一个新的反转,当所有 0-1 对都反转时,您就完成了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。