【发布时间】:2019-05-27 01:26:14
【问题描述】:
给定一个大小为 n 的数组,包含 0 和 1 以及两个操作,找出使所有元素为 0 的最小操作数。
操作:
-
如果第 (i+1) 个元素为 1,并且从第 (i+2) 个到所有连续元素为 0 或不存在(如果 i+2 = n),则翻转第 i 个元素。 (0
例如,上述操作适用于:
在这个元素上
|
V
1100
或
在这个元素上
|
V
1011
- 没有任何限制地翻转第 n 个元素。
n
例如 输入: 1,0,0,0
输出: 15
解释:
1000 -> 1001 -> 1011 -> 1010 -> 1110 -> 1111 -> 1101 -> 1100 -> 0100 -> 0101 -> 0111 -> 0110 -> 0010 -> 0011 -> 0001 -> 0000
【问题讨论】:
-
为什么不能把第一个 1 翻转为 0(第二条规则,没有任何限制)?只需一次操作
-
@AndrewScott 第二条规则仅适用于最后一位 (nth)。对 OP:n 的限制是多少?
-
@user3386109 是的。 OP应该澄清问题陈述
-
@GeorgiGerganov 抱歉,我撤回了我的评论,因为我想到有第 n 个元素,但索引
n处没有元素。我同意 OP 应该澄清问题陈述。 -
@Dharsam1990 请同时添加 n 的限制以及运行时间限制(如果有)。
标签: algorithm bit-manipulation