[leetcode/lintcode 题解] 阿里算法面试题:猜数字游戏

简介: [leetcode/lintcode 题解] 阿里算法面试题:猜数字游戏

描述
你正在和你的朋友玩 猜数字 (Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。
请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。

  • 请注意秘密数字和朋友的猜测数都可能含有重复数字。
  • 你可以假设秘密数字和朋友的猜测数都只包含数字,并且它们的长度永远相等。

在线评测地址:领扣题库官网

样例1
输入:secret = "1807", guess = "7810"
输出:"1A3B"
解释:1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。
样例2
输入:secret = "1123", guess = "0111"
输出:"1A1B"
解释:朋友猜测数中的第一个 1 是公牛,第二个或第三个 1 可被视为奶牛。

解题思路

  • 哈希表

题解:第一遍遍历计算所有相同位置大小相同的个数,分别用大小为10的数组记录两个字符串每个数字出现的次数,第二次遍历数组,相同的次数为对应位置的最小值。

class Solution {
    public String getHint(String secret, String guess) {
        int a = 0,b = 0, n = secret.length();
        int[] ds = new int[10];
        int[] dg = new int[10];
        for(int i = 0; i < n; i++){
            int x = secret.charAt(i)-'0';
            int y = guess.charAt(i)-'0';
            if(x == y) {
                a++;
            }
            ds[x]++;
            dg[y]++;
        }
        for(int i = 0; i < 10; i++) {
            b += Math.min(ds[i],dg[i]);
        }
        return a+""+'A'+(b-a)+""+'B';
    }
}

更多题解参考:九章官网solution

相关文章
|
7月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
8月前
|
机器学习/深度学习 人工智能 算法
当AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
TimeGuessr融合AI与历史文化,首创时间与空间双维度评分体系,结合分段惩罚、Haversine距离计算与加权算法,辅以连击、速度与完美奖励机制,实现公平且富挑战性的游戏体验。
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
429 4
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
291 2
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
216 0
|
人工智能 算法 Java
【搜索算法】数字游戏(C/C++)
【搜索算法】数字游戏(C/C++)
|
算法
互动游戏解决遇到问题之基于射线投射寻路算法的问题如何解决
互动游戏解决遇到问题之基于射线投射寻路算法的问题如何解决
220 0
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
249 1
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
462 1
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
420 4
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口

热门文章

最新文章