在 C++ 中將數字翻轉為零
假設我們有一個名為 nums 的整數陣列,其中包含 0 和 1。假設我們有一種操作,其中我們在 nums 中挑選一個索引 i,並將索引 i 處的元素及所有在 i 右側的數字翻轉。我們必須找出使 nums 中包含所有 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),執行以下操作:
如果 i - 1 >= 0,則:
op[i] := op[i] + op[i - 1]
如果 (nums[i] + op[i]) & 1 非零,則:
(將 op[i] 遞增 1)
(將 ret 遞增 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
廣告