📝题目
1 | 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。 |
📝思路
最直接的思路是,用一个长度为 K 的窗口滑动遍历所有元素,根据最左侧元素的值来决定是否翻转窗口内所有元素,时间复杂度为O(N K),看似不差,但在本题的限制下超时了(毕竟 K 很大的情况下O(N K) 和 O(N)还是有一定差距的)…
既然如此,那便要通过“消灭” K 来省时,上述时间复杂度之所以出现了 K,是因为我们每次遍历可能会实际执行 K 次元素翻转,如果我们不对其翻转呢?
📝题解
1 | int minKBitFlips(vector<int>& A, int K) { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.