news 2026/7/2 17:03:25

力扣算法题:珠玑妙算(算法小白每日一题)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣算法题:珠玑妙算(算法小白每日一题)

题号:面试题16.15 珠玑妙算

题目内容:

珠玑妙算游戏(the game of master mind)的玩法如下。

计算机有4个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。例如,计算机可能有RGGB 4种(槽1为红色,槽2、3为绿色,槽4为蓝色)。作为用户,你试图猜出颜色组合。打个比方,你可能会猜YRGB。要是猜对某个槽的颜色,则算一次“猜中”;要是只猜对颜色但槽位猜错了,则算一次“伪猜中”。注意,“猜中”不能算入“伪猜中”。

给定一种颜色组合solution和一个猜测guess,编写一个方法,返回猜中和伪猜中的次数answer,其中answer[0]为猜中的次数,answer[1]为伪猜中的次数。

注:
  • len(solution) = len(guess) = 4
  • solutionguess仅包含"R","G","B","Y"这4种字符
示例:
输入:solution="RGBY",guess="GGRR"输出:[1,1]解释:猜中1次,伪猜中1次。

解题过程与思路:

这道题可以拆分为两个子问题,一个是计算猜中,另一个是计算伪猜中。

对于猜中问题,采用很简单的同步遍历法即可,此处不再赘述。

对于伪猜中问题,其核心是如何处理 “猜中”不能算入“伪猜中” 这一条件,此处我采用的思路是把原来的字符串转化为列表,先依次遍历求解猜中问题,对于已经猜中的字符则从列表中删除,这样就可以避免重复计数。

使用python编写代码如下:

def master_mind(solution: str, guess: str) -> List[int]: # 将原始字符串转化为列表 l_solution = list(solution) l_guess = list(guess) # 初始化答案 answer = [0, 0] # 初始化列表长度与计数器 num = len(l_guess) i = 0 while i < num: # 同步遍历 if l_guess[i] == l_solution[i]: # 猜中 answer[0] += 1 # 猜中则答案+1 # 删除已猜中的元素 l_solution.pop(i) l_guess.pop(i) # 更新列表长度,防止索引越界 num -= 1 # i保持原位 i -= 1 i += 1 # 更新索引 # 遍历剩余的元素,判断是否伪猜中,因为此时已经排除了猜中的元素,所以只需要判断是否在solution中存在即可 for item in l_guess: if item in l_solution: # 判断是否伪猜中 answer[1] += 1 l_solution.remove(item) # 删除元素,防止重复计算 return answer

优化:

可以看到上面的算法使用了较为复杂的索引更新,理解难度较大并且容易导致索引越界或者跳过元素。因此我们采用更优雅的方式解决伪猜中问题(这个方法由ai提供)

solution = "R G G B",guess = "G R G B"为例,其元素有如下的对应关系:

位置:0 1 2 3solution:R G G B guess: G B G B 结果: 伪 无 猜 猜

可以观察到某个颜色在两边出现的次数与 猜中 + 伪猜中 有关,以G为例,G在两边各出现2次,在0号位上有一次伪猜中,在2号位上有一次猜中;再以B为例,B在solution中出现1次,在guess中出现2次,只有3号位上有一次猜中,而在1号位上,由于solution中的B数量不足,没有元素与其匹配。

综上,我们可以得到这个规律:对于某一颜色,min(solution,guess)= 猜中 + 伪猜中。

使用python编写代码如下:

def master_mind_improved(solution: str, guess: str) -> List[int]: answer = [0, 0] answer[0] = sum(s == g for s, g in zip(solution, guess)) # 猜中的次数 # 计算总匹配数 count_s = Counter(solution) count_g = Counter(guess) total = sum(min(count_s[c], count_g[c]) for c in count_g) # 减去猜中的次数,得到伪猜中的次数 answer[1] = total - answer[0] return answer

关注我,从零开始的算法小白之路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 17:01:32

AI工具制作马年拜年视频全流程指南

1. 马年拜年视频制作全流程解析2026年马年将至&#xff0c;作为一名长期从事数字内容创作的从业者&#xff0c;我深知传统拜年视频已经无法满足现代社交需求。去年春节&#xff0c;我尝试用AI工具制作了一套拜年视频&#xff0c;不仅节省了80%的制作时间&#xff0c;还获得了朋…

作者头像 李华
网站建设 2026/7/2 17:01:12

字节跳动CEO梁汝波最新发的一封全员信,翻译过来只有一句话

6月29日&#xff0c;字节跳动更新了领导力原则。CEO梁汝波发了一封全员邮件。上一次更新是四年前。这一次&#xff0c;最核心的一条叫「Context over Control」——上下文重于控制。 在一家十万人的公司里&#xff0c;更新领导力原则不是小事。每一条原则背后&#xff0c;都在…

作者头像 李华
网站建设 2026/7/2 16:59:32

IIM-42652与PIC32MX695F512L实现高精度运动追踪方案

1. 项目背景与核心组件解析在嵌入式系统开发领域&#xff0c;精确的运动追踪一直是个技术难点。IIM-42652这款6轴IMU&#xff08;惯性测量单元&#xff09;配合PIC32MX695F512L微控制器的组合&#xff0c;为开发者提供了一套高性价比的解决方案。这个搭配特别适合需要实时姿态检…

作者头像 李华
网站建设 2026/7/2 16:58:19

大模型原生能力崛起:中间层技术归零趋势与架构重构指南

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是一次架构级“静默坍缩”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题不是修辞&#xff0c;不是营销话术&#xff0c;更不是对某款新模型的夸张吹捧。它直指一个正在发生的、肉眼…

作者头像 李华
网站建设 2026/7/2 16:56:09

Mac散热控制技术挑战与smcFanControl智能解决方案

Mac散热控制技术挑战与smcFanControl智能解决方案 【免费下载链接】smcFanControl Control the fans of every Intel Mac to make it run cooler 项目地址: https://gitcode.com/gh_mirrors/smc/smcFanControl Intel Mac用户经常面临设备过热和风扇噪音问题&#xff0c;…

作者头像 李华