在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 送芒果的祝福语简短
18 送给学长毕业祝福语简短