995. Minimum Number of K Consecutive Bit Flips

谁借莪1个温暖的怀抱¢ 2022-03-07 14:18 219阅读 0赞

In an array A containing only 0s and 1s, a K-bit flip consists of choosing a (contiguous) subarray of length K and simultaneously changing every 0 in the subarray to 1, and every 1 in the subarray to 0.

Return the minimum number of K-bit flips required so that there is no 0 in the array. If it is not possible, return -1.

Example 1:

  1. Input: A = [0,1,0], K = 1
  2. Output: 2
  3. Explanation: Flip A[0], then flip A[2].

Example 2:

  1. Input: A = [1,1,0], K = 2
  2. Output: -1
  3. Explanation: No matter how we flip subarrays of size 2, we can't make the array become [1,1,1].

Example 3:

  1. Input: A = [0,0,0,1,0,1,1,0], K = 3
  2. Output: 3
  3. Explanation:
  4. Flip A[0],A[1],A[2]: A becomes [1,1,1,1,0,1,1,0]
  5. Flip A[4],A[5],A[6]: A becomes [1,1,1,1,1,0,0,0]
  6. Flip A[5],A[6],A[7]: A becomes [1,1,1,1,1,1,1,1]

Note:
1 <= A.length <= 30000
1 <= K <= A.length

难度:Hard

题目:在一个只包含0和1的数组中,每次可以翻转K个元素,其中所有的0翻转成1,1翻转成0. 返回其最小的翻转次数。如果不存在则返回-1.

思路:贪心算法,每次找到第1个0后翻转从该元素开始的K个元素。

Runtime: 140 ms, faster than 71.57% of Java online submissions for Minimum Number of K Consecutive Bit Flips.
Memory Usage: 48.4 MB, less than 6.43% of Java online submissions for Minimum Number of K Consecutive Bit Flips.

  1. class Solution {
  2. public int minKBitFlips(int[] A, int K) {
  3. int i = 0, count = 0;
  4. while (i <= A.length - 1) {
  5. if (1 == A[i]) {
  6. i++;
  7. continue;
  8. }
  9. if (i + K > A.length) {
  10. return -1;
  11. }
  12. count++;
  13. for (int t = i; t < i + K; t++) {
  14. A[t] = (A[t] + 1) & 1;
  15. }
  16. }
  17. return count;
  18. }
  19. }

发表评论

表情:
评论列表 (有 0 条评论,219人围观)

还没有评论,来说两句吧...

相关阅读

    相关 #191 Number of 1 Bits

    没有找到数算书。。摸了一本C++ Primer过来。再从网上学学吧~ 今天还是看看简单题好了,哪里不会学哪里。 挑一道看起来就简单的嘿嘿。 [\191 Number of