数列最小次数翻转

牛妹爱数列

https://ac.nowcoder.com/acm/contest/6885/D

问题描述

他手里有一个长度为n的序列a,保证它是一个01序列,并执行以下两种操作:
1.单点修改:将位置x上的数翻转(0变1,1变0);
2.前缀修改:将位置1~x上的数翻转(每个数都0变1,1变0)。
他现在想要最小化翻转次数,使得数列上的所有数都变为0。

输入输出

第一行,输入一个数n。
第二行,输入n个数,第i个数表示aia_iai​。

输出最小翻转次数。

代码

import java.util.*;
public class Main{

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++)
            arr[i] = scan.nextInt();
        System.out.println(solution(arr));
    }

    private static int solution(int[] arr) {
        int count = 0;
        boolean flag = true;
       // 从后往前
        for (int i = arr.length-1; i >= 0; i--) {
            if (flag && arr[i] == 0 || !flag && arr[i] == 1) continue;
            else if (flag && arr[i] == 1) {  // 从0到1
                if (i == 0 || arr[i - 1] == 0) count++;  // 下一个又变回0
                else {
                    flag = !flag;
                    count++;
                }
            } else {   // 从1到0
                if (i == 0 || arr[i - 1] == 1) count++;  // 下一个又变回1
                else {
                    flag = !flag;
                    count++;
                }
            }
        }
        return count;
    }
}
全部评论

相关推荐

05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
牛客383479252号:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务