蓝桥杯:外卖店优先级(map排序算法) Java

2023-11-03

分析:

  • 发现只是输入两种数据,则可以考虑用map
  • 经过分析发现,可以用店家编号来表示map的第一个参数Integer,第二个参数因为有可能有多个相同的时刻,所以用arraylist<Integer>
  • 然后遍历每一家店,判断是不是在优先缓存中
  • 利用count[]录入输入时刻的订单,最后遍历每个时刻来判断

进步:

  • treemap的key不可重复,但是treemap的key可以自动升序排列
  • if(map.containsKey(id)){}
  • 如果第二个参数是arraylist,则可map.get(id).add(t)
  • list.add()
  • map.put()
  • for(Integer key:map.keyset())
  • 利用count[]的下标来表示时刻,值来表示多少个订单数(可以发现他和map有点像,但是和map的差距是,没有containsKey()等方法,唯一的好处是比较简单)
  • 利用flag来判断是否在优先缓存中
  • 一定要注意好,题目到底让你输出什么,根据你要输出什么来写出逻辑

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Map;
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int nd=scan.nextInt();//店数量
        int n=scan.nextInt();//几条订单信息
        int t=scan.nextInt();//多少个时刻
        //参数1表示店id,参数2表示有多少个时刻
        Map<Integer,ArrayList<Integer>> map=new TreeMap<>();

        for(int i=0;i<n;i++){
            int time=scan.nextInt();
            int id=scan.nextInt();
            if(map.containsKey(id)){
                map.get(id).add(time);
            }else{
                ArrayList<Integer> temp=new ArrayList<Integer>();
                temp.add(time);
                map.put(id, temp);
            }
        }
        int result=0;//统计有多少家店在优先缓存中

        //遍历每一家店
        for (Integer key: map.keySet()) {
            int[] count=new int[t+1];//表示某个时刻收到多少订单

            //遍历arraylist,赋值订单
            ArrayList<Integer> list=map.get(key);
            for(int i=0;i<list.size();i++){
                //输入时刻的订单录入
                count[list.get(i)]+=1;
            }

            int priority=0;//优先级
            boolean flag=false;//显示这家店是否还在优先缓存
            //遍历每个时刻
            for(int i=1;i < count.length;i++){
                //如果有订单,优先级加2
                if(count[i]!=0){
                    priority+=count[i]*2;
                    if(priority>5){
                        flag=true;
                    }
                }else{
                    //如果没有订单,则优先级-1
                    //如果优先级
                    if(priority!=0){
                        priority--;
                    }                        
                    if(priority<=3){
                            flag=false;
                    }
                }
            }

            if(flag==true){
                result++;
            }
        }

        System.out.println(result);
        scan.close();
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯:外卖店优先级(map排序算法) Java 的相关文章

随机推荐

  • Drools规则引擎入门学习记录

    业务开发过程中 对于某些判断性的通用规则是基于if else封装 还是基于策略模式封装 无论以上那种封装出来的方法 只能在单体软件包中共用 且不能无感部署 然而对于业务而言 可能规则改变的比较频繁 例如与营销有关的活动 会频繁的修改商品价格
  • (css必看)禁止用户拖动,禁止选中复制,禁止输入框输入

    目录 特殊的css 下面每一个都必须了解 1 user select属性可以设置是否允许用户选择页面中的图文内容 2 user drag属性可以设置是否允许页面元素拖拽 3 user modify属性可以设置是否允许输入框输入内容 特殊的c
  • xmlHttpRequest的status的值的含义

    转自 http www cnblogs com zhubaoxu archive 2008 03 17 1109315 html 虽然常写ajax方面的东西 但是很少去专门了解xmlHttpRequest的status各个值的含义 只是在用
  • C语言基础知识--static 关键字

    目录 一 static 修饰全局变量 二 static 修饰局部变量 三 static 修饰函数 一 static 修饰全局变量 此用法多出现在由多个源文件组成的项目中 static修饰表示该变量只可在定义该变量的文件下访问该static变
  • MinGW安装教程

    前言 本文主要讲述如何安装 C语言 编译器 MinGW 特点是文章附有完整详细的实际安装过程截图 文字反而起说明提示作用 编写本文的原因始于我的一个观点 图片可以比文字传达更多的信息 也能让其他人更容易理解作者的意图及思想 因此 我将安装
  • luckysheet内网(离线)使用

    luckysheet内网 离线 使用 需要先把有关联网引用的文件 搞下来 const dependScripts https cdn jsdelivr net npm vue 2 6 11 expendPlugins chart onlin
  • [Unity 3D] 求两个向量间的夹角的方法

    1 Vector3 d1 transform forward Vector3 d2 new Vector3 0 3 0 float angle Vector3 Angle d1 d2 2 Vector3 d1 transform forwa
  • 微信小程序实现js控制动画——点击播放动画

    功能需求 点击刷新图标 图标旋转进入Loading状态 加载完毕 动画停止 index wxml
  • JAVA中 IO输入输出流的基本用法和文件复制的案例

    IO 即in和out 也就是输入和输出 指应用程序和外部设备之间的数据传递 常见的外部设备包括文件 管道 网络连接 Java 中是通过流处理IO 的 那么什么是流 流 Stream 是一个抽象的概念 是指一连串的数据 字符或字节 是以先进先
  • npm .npmrc作用

    在执行npm install g cordova ionic时出错 可以修改npm源 npm全名Node Package Manager npmrc文件的作用 就是配置npm源 该文件在C盘用户文件目录下 eg 淘宝源 registry h
  • ORCAD 16.6使用说明及技巧

    1 元器件基本操作 R 翻转 H 左右镜像 V 上下镜像 I 放大视图 O 缩小视图 2 选中工程根文件夹 点击Edit Browse Parts Nets等可查看所有信息 3 元件属性 白色 instance 平坦式 黄色 occuren
  • socket原理以及socket的简单实现

    目录 一 socket学前基础 TCP的三次握手和四次挥手 二 为什么要使用socket 三 什么是socket 四 socket的简单代码实现 服务端 客户端 一 socket学前基础 TCP的三次握手和四次挥手 1 服务端和客户端如果想
  • python怎么绘制渐变图_有没有一种使用Python生成渐变位图的简单方法?

    实现这一点的一种方法是使用matplotlib 正如您在标记中建议的那样 为了做到这一点 我会的使用numpy创建一个NxN数组来表示image gradient 在 创建一个figure 其大小以英寸为单位与圆的半径 image circ
  • 浏览器console几种报错类型

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 SyntaxError 语法错误 2 TypeError 类型错误 通常是 is not a function 即 不是一个函数 3 ReferenceError 引用
  • 开启电脑虚拟化功能

    一 查看笔记本是否支持虚拟化 打开任务管理器 同时摁住ctrl alt del这个三个健 选择任务管理器 查看是否开启虚拟机 如果未开启 一 进入BIOS 参考以下按键 开机时按住对应的键进入BIOS 组装机以主板分 华硕按F8 Intel
  • 最强自动化测试框架Playwright-(2)元素定位

    元素定位 定位器是playwright自动等待和重试功能的核心部分 简而言之 定位器表示一种随时在页面上查找元素的方法 Locators Playwright Python 如下这些是推荐的 page get by role 按显式和隐式辅
  • 关于window.open()方法 返回的的打开的新窗口的对象

    关于window open 方法 返回的的打开的新窗口的对象
  • Dump libasound 音频数据

    QNX有如下两种方法dump pcm数据 可以录声卡之前的数据 1 QNX自带的pcm logger工具 工具位置 qnx qnx sdp target qnx7 aarch64le usr bin pcm logger 打开pcm dum
  • 计算机网络-运输层

    To 个人主页 关注不迷路 运输层 重要概念 运输层为相互通信的应用进程提供逻辑通信 端口和套接字的意义 无连接的 UDP 的特点 面向连接的 TCP 的特点 在不可靠的网络上实现可靠传输的工作原理 停止等待协议和 ARQ 协议 TCP 滑
  • 蓝桥杯:外卖店优先级(map排序算法) Java

    分析 发现只是输入两种数据 则可以考虑用map 经过分析发现 可以用店家编号来表示map的第一个参数Integer 第二个参数因为有可能有多个相同的时刻 所以用arraylist