腾讯一面之气球游戏

简介: 腾讯一面之气球游戏

题目原文

小Q在进行射击气球的游戏,如果小Q在连续T枪中打爆了所有颜色的气球,将得到一只QQ公仔作为奖励。(每种颜色的球至少被打爆一只)。

这个游戏中有m种不同颜色的气球,编号1到m。

小Q一共有n发子弹,然后连续开了n枪。

小Q想知道在这n枪中,打爆所有颜色的气球最少用了连续几枪?

原始连接

思路与解答

这个题目一开始是琢磨题目了半天,后面自己整理了一下,基本就是不断开枪,开枪之后数字就代表颜色编号,因为颜色可以重复的,题目是问里面连续中枪的时候可以覆盖全部的颜色。

直观上来说其实就是需要连续的一段数字里面可以保证包含所有的颜色,图中两个箭头都满足,但是我们需要的是最短的射击次数,所以后面的才是要的答案。

这种两边夹住一部分结果进行判断的操作其实都是窗口的思想。

我们可以定义两个指针,左边和右边,两个指针都是递增的,

1、当我们移动右边边的指针的时候保证窗口内可以包含所有元素,当满足条件的时候停止

2、我们移动左边指针,意味着窗口内元素会减少,当我们减少元素的时候,不断判断是否窗口内还是满足全部的元素

3、窗口内的元素个数我们计数,在窗口里面则每出现一次就+1,移除的时候则减一,当窗口里面每次移除的时候我们更新路径

代码示例

 public static int search(int[] nums, int colorCount) {
        int left = 0;
        int right = 0;
        int[] colorCnts = new int[colorCount + 1]; //记录窗口内颜色的个数,因为颜色不会从0开始,所以数组个数+1
        int curColor = colorCount;
        Arrays.fill(colorCnts, 1);
        colorCnts[0] = 0;
        int window = Integer.MAX_VALUE;
        while (right < nums.length) {
            int rightNumber = nums[right];
            right++;
            if (colorCnts[rightNumber]-- > 0) {
                curColor--;
            }
            while (curColor == 0) {
                if (right - left < window) {
                    window = right - left;
                }
                int leftNumber = nums[left];
                left++;
                if (colorCnts[leftNumber]++ == 0) {
                    curColor++;
                }
            }
        }
        return window == Integer.MAX_VALUE ? -1 : window;
    }

代码说明,我们提前把窗口内颜色对应的数字都做标记,里面有1的就是存在的标记

当right往右边移动时,颜色进入窗口,我们把颜色数量往下减,直到数量是0的时候,说明全部颜色都覆盖了,此时移动左边指针,颜色出窗口的时候颜色标记+1

目录
相关文章
|
移动开发 分布式计算 Spark
Spark的几种去重的原理分析
Spark的几种去重的原理分析
388 0
|
存储 分布式计算 Hadoop
分布式数据库HBase的常用操作的对应的API编程接口
HBase是一个分布式数据库系统,基于Google的BigTable和Apache Hadoop的HDFS构建。它提供了一个高性能、可扩展的数据库平台,适用于大规模的数据存储和处理。在阿里云开发者社区中,很多开发者都会使用HBase进行数据存储和处理。本文将介绍HBase的常用操作及其对应的API编程接口。
497 0
|
缓存 开发工具 git
【git】解决:remote: Permission to xxxx/xxxx.git denied to xxxx
【git】解决:remote: Permission to xxxx/xxxx.git denied to xxxx
1249 0
|
7月前
|
弹性计算 固态存储 ice
阿里云服务器ECS内存型2核16G、4核32G和8核64G配置实例、费用和性能参数表
本文整理了2025年阿里云服务器租赁价格表,涵盖2核16G、4核32G和8核64G配置收费标准。CPU内存比为1:8,提供多种实例规格如ECS内存型r8i、通用算力型u1等。价格由CPU内存、公网带宽及系统盘组成,支持优惠折扣(年付6.7折起)。文中详细列出各配置参考价格、公网带宽与系统盘收费,并对比不同实例规格性能,如Intel Xeon和AMD EPYC处理器系列,帮助用户选择高性价比方案。具体价格以阿里云官网为准。
1106 4
|
弹性计算 网络安全 数据安全/隐私保护
三分钟在阿里云搭建自己的帕鲁服务器
《幻兽帕鲁》是Pocketpair投资10亿日元(约合人民币4842万元),耗费近4年时间开发的一款开放世界生存制作游戏,游戏于2023年11月2日至11月5日进行了封闭网络测试,于2024年1月18日发行抢先体验版本 。 游戏中,玩家可以在广阔的世界中收集神奇的生物“帕鲁”,派他们进行战斗、建造、做农活,工业生产等。 在帕鲁的世界,玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。 帕鲁可以进行战斗、繁殖、协助玩家做农活,也可以为玩家在工厂工作。 玩家也可以将它们进行售卖,或肢解后食用。
649 10
三分钟在阿里云搭建自己的帕鲁服务器
|
缓存 云计算
这个夏天,追光动画在阿里云上“绘出”《长安三万里》
追光动画已和阿里云合作多年,从《阿唐奇遇》到《白蛇2:青蛇劫起》、《新神榜:杨戬》和这次的《长安三万里》等。
这个夏天,追光动画在阿里云上“绘出”《长安三万里》
|
存储 SQL 分布式计算
SparkSQL优化策略大盘点
SparkSQL优化策略大盘点
241 0
|
存储 数据采集 JSON
彻底搞懂监控系统,使用Prometheus +Grafana搭建完整的应用监控系统
监控是运维系统的基础,我们衡量一个公司/部门的运维水平,看他们的监控系统就可以了。一个完善的监控系统可以提高应用的可用性和可靠性,在提供更优质服务的前提下,降低运维的投入和工作量,为用户带来更多的商业利益和客户体验。下面就带大家彻底搞懂监控系统,使用Prometheus +Grafana搭建完整的应用监控系统。
16225 1
彻底搞懂监控系统,使用Prometheus +Grafana搭建完整的应用监控系统
|
SQL 分布式计算 大数据
利用SparkSQL Logical Plan Parse 打造大数据平台SQL诊断利器
利用SparkSQL Logical Plan Parse 打造大数据平台SQL诊断利器
279 0
|
存储 分布式计算 资源调度
Spark性能优化之SparkUI
Spark性能优化之SparkUI
384 0