在C ++中翻转为零
假设我们有一个称为nums的整数数组,其中包含0和1。假设我们有一个操作,我们选择以数字为单位的索引i,并在索引i处翻转元素以及i右边的所有数字。我们必须找到使num包含全0所需的最少操作数。
因此,如果输入类似于[1,0,1],则输出将为3,对索引0进行运算,它将转换为[0,1,0],然后对索引1[0,0,1]进行运算,然后是索引2[0,0,0]。
为了解决这个问题,我们将遵循以下步骤-
n:=nums的大小
定义大小为n的数组op
ret:=0
对于初始化i:=0,当i<nums大小时,更新(将i增加1),执行-
(将op[i]增加1)
(增加ret1)
op[i]:=op[i]+op[i-1]
如果i-1>=0,则-
如果(nums[i]+op[i])&1不为零,则-
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(vector<int>& nums) {
int n = nums.size();
vector<int> op(n);
int ret = 0;
for (int i = 0; i < nums.size(); i++) {
if (i - 1 >= 0) {
op[i] += op[i - 1];
}
if ((nums[i] + op[i]) & 1) {
op[i]++;
ret++;
}
}
return ret;
}
};
main() {
Solution ob;
vector<int> v = {1,0,1};
cout << (ob.solve(v));
}输入值
{1,0,1}输出结果
3
热门推荐
10 儿子立冬祝福语简短独特
11 对当兵的祝福语简短
12 侄儿高考试祝福语简短
13 伴郎红包祝福语朋友简短
14 媳妇生日简短祝福语朋友
15 公司年会祝福语简短最好
16 元旦感恩祝福语简短大全
17 红包祝福语简短10字
18 周六早晨祝福语简短