在 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

更新日期:2020-09-02

312 次瀏覽

開啟你的 事業

完成該課程獲得認證

入門
廣告