气球游戏腾讯面试题滑动窗口解法
2021-05-02 11:30
801 查看
气球游戏
1 背景
面试腾讯,面试官感觉很忙,一边工作一边面试,一上来自我介绍都省了,直接就是这道题,让半小时写出来,面试的时候思路理出来了,但是平时滑动窗口写的少,自然是没写出来了,假期特地恶补了滑动窗口。发现网上还很少这道题的解法,于是简单整理了一下。题目虽然叫气球游戏,但是本质其实还是“最小覆盖字串”。
2 题目描述
小Q在进行射击气球的游戏,如果小Q在连续T枪中打爆了所有颜色的气球,将得到一只QQ公仔作为奖励。(每种颜色的气球至少被打爆一只)。
这个游戏中有m种不同颜色的气球,编号1到m。小Q一共有n发子弹,然后连续开了n枪。小Q想知道在这n枪中,打爆所有颜色的气球最少用了连续几枪?
- 输入描述:
第一行两个空格间隔的整数数n,m。n<=1000000 m<=2000
第二行一共n个空格间隔的整数,分别表示每一枪打中的气球的颜色,0表示没打中任何颜色的气球。
- 输出描述:
一个整数表示小Q打爆所有颜色气球用的最少枪数。如果小Q无法在这n枪打爆所有颜色的气球,则输出-1
- 示例1
输入:
12 5
2 5 3 1 3 2 4 1 0 5 4 3
输出:
6
- 示例2
输入:
12 5
2 5 3 1 3 2 4 1 5 0 4 3
输出: 5
3 题解
-
思路:
滑动窗口算法。先向右不断扩大窗口,满足条件是,再从左边缩小窗口找到最优解。 -
实现:
/** * @author csh * @date 2021/5/1 */ public class BalloonGame { private Integer balloonGame(int n, int m, int[] balloon) { // 定义窗口和need HashMap<Integer, Integer> need = new HashMap<>(); HashMap<Integer, Integer> window = new HashMap<>(); // m种颜色的气球 for (int i = 1; i <= m; i++) need.put(i, 1); // 控制窗口用的指针 int left = 0, right = 0; // window中满need条件的个数 int valid = 0; int res = Integer.MAX_VALUE; while (right < n) { // 向右扩大窗口 int num = balloon[right]; right++; if (need.containsKey(num)) { window.put(num, window.getOrDefault(num, 0) + 1); if (window.get(num).equals(need.get(num))) valid++; } while (valid == m) { ad8 // 记录最小窗口 res = Math.min(res, right - left); // 缩小窗口 int num2 = balloon[left]; left++; if (need.containsKey(num2)) { if (window.get(num2).equals(need.get(num2))) valid--; window.put(num2, window.getOrDefault(num2, 0) - 1); } } } return res == Integer.MAX_VALUE ? -1 : res; } public static void main(String[] args) { int[] balloon = new int[]{2, 5, 3, 1, 3, 2, 4, 1, 0, 5, 4, 3}; // 答案:6 int[] balloon2 = new int[]{2, 5, 3, 1, 3, 2, 4, 1, 5, 0, 4, 3}; // 答案:5 BalloonGame main = new BalloonGame(); Integer res = main.balloonGame(12, 5, balloon2); System.out.print("最少需要:" + res); } }
相关文章推荐
- 关于腾讯这道数组面试题,这可能是最笨的解法
- 2011-2012年腾讯,创新工场,淘宝,百度,阿里,迅雷。网易游戏校园招聘面试题集锦(1-25题含答案)
- 腾讯实习生面试题
- 2016 腾讯软件开发面试题(不定项选择题【1-12】)
- 10道腾讯的Java面试题
- 2019 互联网月饼大赏!阿里开动物园,腾讯秀表情包,网易游戏最会玩!
- 探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
- 转:链表相交有环 经典面试题(三)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 2012腾讯实习生内推面试题
- 腾讯面试题
- 经典面试题(四)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 金九银十面试突击,卧底去阿里、京东、美团、腾讯带回来的面试题(内含答案)
- [Unity3D]上海某大型游戏公司的基础面试题
- 抖音热门游戏Fill one-line puzzle game解法的Python代码实现
- 腾讯勇夺全球游戏霸主地位,“英雄联盟”成基石
- 腾讯,阿里等面试题(一)
- 年度移动游戏行业观察:腾讯或将涉足新品类
- 阿里、腾讯、百度、华为、京东、搜狗和滴滴最新面试题汇集
- 【转】腾讯微信面试题--实现时间复杂度为O(1)的栈 2013-02-26
- 【剑指Offer】面试题65:滑动窗口的最大值