2022美团笔试算法

问题描述

  • 小美有一个纸带,纸带上有一串数字,数字只会是 -1,0或1,已知在任意一处都可能为分割点
  • ,要求在分割点前打印的数字是小于0的,在分割点后打印出来的数字是大于0的。即在分割点前
  • 大于等于0的数据和分割点后小于等于0的数据都是异常的。分割点是未知的,那么请问在最乐观
  • 的情况下至少有多少个数据是异常的。
  • 输入第一行包含一个正整数n,表示小美在纸带上打印的数字数量。
  • 输入第二行包含n个整数,即小美在纸带上打印的数字,中间用空格隔开。
  • 输出仅包含一个整数,表示至少有多少个实验数据是异常的。
  • 输入:
  • 5
  • 0 -1 1 1 -1
  • 输出:
  • 2
import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] nums = new int[n];
        int num0=0,num2=0;
        for (int i = 0; i < n; i++) {
            nums[i] = sc.nextInt();
            if(nums[i]==0){
                num0++;
            } else if (nums[i] == -1) {
                num2++;
            }
        }
        int count1=0,count2=0;
        int res=num0+num2;
        for (int i = 0; i < n; i++) {
           if (nums[i] == 1) {
                count1++;
            } else if(nums[i]==-1){
                count2++;
            }
            res = Math.min(num0 + count1 + num2 - count2, res);
        }
        System.out.println(res);
    }
}


原因分析:

提示:记录每种数字个数,从左往右依次将每一位置看作分割点进行计算

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值