
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Flip to Zeros in C++
Suppose we have one integer array called nums and this contains 0s and 1s. Suppose we have an operation where we pick an index i in nums and flip element at index i as well as all numbers to the right of i. We have to find the minimum number of operations required to make nums contain all 0s.
So, if the input is like [1,0,1], then the output will be 3, operation on index 0, it will convert [0,1,0], then on index 1 [0,0,1], then index 2, [0,0,0].
To solve this, we will follow these steps −
n := size of nums
Define an array op of size n
ret := 0
-
for initialize i := 0, when i < size of nums, update (increase i by 1), do −
-
if i - 1 >= 0, then −
op[i] := op[i] + op[i - 1]
-
if (nums[i] + op[i]) & 1 is non-zero, then −
(increase op[i] by 1)
(increase ret by 1)
-
Let us see the following implementation to get better understanding −
Example
#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)); }
Input
{1,0,1}
Output
3