百度最新面试题:祖玛游戏思路详解
这是一个祖玛游戏。
一行球放在桌面上,球被涂上了红(R)、黄(Y)、蓝(B)、绿(G)和白(W)这么几种颜色,同时你也拥有几个球。
每一次,从你拥有的球当中拿出一个,插入到当前行当中(包括最左边和最右边)。然后,如果有三个或更多的同色球挨在一起,然后就消除这几个球。一直这么做直到没有更多的球可以消除。
找到最少的需要插入的球的数量,使得所有的球都可以被删除。如果不能删除所有的球,那么就返回-1。
- 初始的行不会拥有三个及以上的连续的同色球。
- 行中的球的数量不会超过20,用名为"borad"的输入字符串表示。
- 你拥有的球不会超过5个,用名为"hand"的输入字符串表示。
- 输入字符串都非空,而且仅包含字符 ‘R’,‘Y’,‘B’,‘G’,‘W’。
点这里可以在线做题
样例 1:
输入: "WRRBBW", "RB"
输出: -1
解释: WRRBBW -> WRR[R]BBW -> WBBW -> WBB[B]W -> WW
样例 2:
输入: "WWRRBBWW", "WRBRW"
输出: 2
解释: WWRRBBWW -> WWRR[R]BBWW -> WWBBWW -> WWBB[B]WW -> WWWW -> empty
样例 3:
输入:"G", "GGGGG"
输出: 2
解释: G -> G[G] -> GG[G] -> empty
样例 4:
输入: "RBYYBBRRB", "YRBGB"
输出: 3
解释: RBYYBBRRB -> RBYY[Y]BBRRB -> RBBBRRB -> RRRB -> B -> B[B] -> BB[B] -> empty
【题解】
考点:
- 搜索
题解:基本思路就是搜索,c数组统计自己各类球的数量,对board进行遍历,然后j保存一段的起点,i向后移动至出现不同的球,然后对这段长度判断,根据inc判断需要几个球插入,对应的球数量减少,然后截取起点至j的区间和i至区间终点的两段拼接,继续搜索即可。
public class Solution {/*** @param board: the given board* @param hand: the balls in your hand* @return: the minimal balls you have to insert to remove all the balls on the table*/private int aux(String s, int[] c){if("".equals(s)) {return 0;}int res = 2 * s.length() + 1; for(int i = 0; i < s.length();){int j = i++; //j保存起点while(i < s.length() && s.charAt(i) == s.charAt(j)) {i++;}int inc = 3 - i + j; //3-(i-j) 判断消除需要几个球if(c[s.charAt(j)] >= inc){ //如果数量足够int used = inc <= 0 ? 0 : inc; //如果inc<=0,不需要c[s.charAt(j)] -= used; //用掉s[j]int temp = aux(s.substring(0, j) + s.substring(i), c); //去除j至i的一段继续搜索if(temp >= 0) {res = Math.min(res, used + temp);}c[s.charAt(j)] += used; //搜索完成后补充球的数量}}return res == 2 * s.length() + 1 ? -1 : res;}public int findMinStep(String board, String hand) {// Write your code hereint[] c = new int[128];for(char x : hand.toCharArray()){c[x]++;}return aux(board, c);}
}
更多题解参见
百度最新面试题:祖玛游戏思路详解相关推荐
- 21年最新Python面试题及答案汇总详解(上)
错过三月找工作的机会,还要错过四月的好时期吗?Python面试你做准备了吗?下面小编整理了一套2021年最新Python常见面试题目,及Python面试题目答案汇总.希望能够帮助到大家. 21年最新P ...
- python逢7跳过_python实现逢七拍腿小游戏的思路详解
逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿.现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句 ...
- python拍七游戏代码_python实现逢七拍腿小游戏的思路详解
逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿.现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句 ...
- JAVA抖音潜艇挑战_Android 实现抖音小游戏潜艇大挑战的思路详解
<潜水艇大挑战>是抖音上的一款小游戏,以面部识别来驱动潜艇通过障碍物,最近特别火爆,相信很多人都玩过. 一时兴起自己用Android自定义View也撸了一个,发现只要有好的创意,不用高深的 ...
- jquery制作html小游戏,JQuery手速测试小游戏实现思路详解
(-1)写在前面 我用的chrome49,jquery3.0,我得到过399分,信不信由你. (1)设计思路 两个p元素放在div里,每个p元素的高度和宽度都和div一样,当鼠标放在div上时,第一个 ...
- 百度提前批-百度智能小程序(面经详解)
文章目录 百度提前批-百度智能小程序(面经详解) 1.定位 2.z-index .层叠 3.作用域(scope) 4.单例模式 5.原型链 6.继承(借用构造函数,寄生组合继承,缺点是什么) 7.闭包 ...
- 《Android游戏开发详解》一导读
前 言 Android游戏开发详解 作为对编程知之甚少或者毫无所知的初学者,开始学习Android游戏开发,可能会觉得就像是穿越陌生的星际的旅程.有太多的事情要尝试,太多的知识要学习,令人遗憾的是,还 ...
- Java编程配置思路详解
Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...
- android仿知乎按钮动效,Android仿知乎客户端关注和取消关注的按钮点击特效实现思路详解...
先说明一下,项目代码已上传至github,不想看长篇大论的也可以先去下代码,对照代码,哪里不懂点哪里. 代码在这https://github.com/zgzczzw/ZHFollowButton 前几 ...
最新文章
- MATLAB应用实战系列(七十七)-基于长时间序列栅格数据的MK检验
- datatable导出Excel
- 草根版创业网站学巴菲特售时间 获天使投资
- mybatis批量插入(insert)和批量更新(update)
- 【代码审计】PHP代码审计---基础记录
- hadoop项目实战--ETL--(三)实现mysql表到HIVE表的全量导入与增量导入
- 创业阶段如何找客户_刚成立公司,怎么样找客户?
- day23 内置函数,匿名函数,递归
- keytool 错误 java.io.IOException: incorrect AVA format
- r720换固态硬盘后如何重装系统_联想R720重装Winddows10无法识别固态硬盘咋办
- viewUrl 终结者
- uart协议学习,从了解到入门,看这篇文章
- js怎么实现那种整体页面变灰色
- 香农编码、费诺编码、哈弗曼编码
- 群晖文件管理系统使用教程
- ‘\t‘和“\t“的区别及作用
- 春节消费观察:四种愉悦感,抓住女人心
- 全网最详细之如何安装gpu版的pytorch
- 案例 | 珠宝行业:多触点个性化营销,企业微信赋能线下门店导购
- Zero-shot-RIS
热门文章
- 揭秘:清末时期老北京的四大头牌名妓的悲喜人生
- C# - Dictionary ( 字典 )
- 白帽SEO是什么?与黑帽SEO有什么区别?
- 重启服务器后mysql表损坏 Incorrect key file for table ‘.\axxxx.MYI‘; try to repair it“,“tourl“:““,.....
- Gunicorn入门学习
- 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。
- 2016年终总结 -- 我希望今年是我最差的一年
- T110Balanced Binary Tree
- Python汉诺塔 费布拉奇数列
- java 开源 报表_6款常用的Java开源报表制作工具