ohmyblog

#算法

经典题解析:硬币数量有限,凑出目标金额还能一直贪心吗

面额大的硬币先拿,剩下金额再继续,这个办法什么时候正确?先把题意说完整:本文讨论任意正整数面额、每种数量有限、恰好凑出目标金额,并最小化硬币总数。若题目额外给定特殊面额结构,可以另行证明更简单策略,不能把一般情况与特例混用。

经典题解析:相邻交换几次,才能把同一个字母聚到一起

字符串里几个相同字母隔着其他字符,最多交换 m 次相邻字符,能把多长的一段相同字母聚在一起?直接搜索所有交换会迅速膨胀。更好的入口是先忘掉其他字符的身份,只记录目标字符出现在哪里。

经典题解析:二叉树有多少节点,为什么叶子数等于双子节点数加一

一棵二叉树有九个叶节点、四个只有一个孩子的节点,能不能算出总节点数?这类题不需要猜树的形状,关键是把“节点分几类”和“树一共有几条边”联系起来。先说明这里的二叉树,每个节点最多两个孩子,并不是每个非叶节点都必须有两个孩子。

经典题解析:三个警察和三个囚徒过河,怎样用 BFS 找最短方案

三个警察和三个囚徒过河,凭直觉往返安排,很容易漏掉另一岸的约束。把它改写成状态图后,问题会清楚得多:什么叫一个局面,哪些动作能产生新局面,以及怎样知道找到的是最少渡河次数。

经典题解析:不用字符串,怎样判断一个整数是回文数

判断 12321 是不是回文,转成字符串再反转当然直观。但如果题目限制不能使用字符串,真正的考点就变成了:怎样取出末位、怎样缩短原数,以及怎样避免为了检查一个数,先把整个数反转到溢出。

笔试真题复盘:ISBN 的最后一位识别码是怎么算出来的

先说明属性:这是一篇笔试真题复盘,题目出自本地历史笔试题集整理,与任何公司的当前招聘无关。题面很生活化:一本正式出版的图书都有一个 ISBN 号码,前 9 位是数字,第 10 位是识别码;

笔试真题复盘:骰子扔一次不满意可以再扔一次,期望收益是多少

先说明属性:这是一篇笔试真题复盘,题目出自本地历史面试资料整理,与任何公司的当前招聘无关。题面很短:扔一个骰子,扔到几点就返现几元;第一次扔完看到点数后,你可以二选一——直接拿走这个点数,或者再扔一次,但这时只能拿第二次的点数。玩一轮的期望收益是多少?

笔试真题复盘:环形手串上同色不能挤在 m 颗珠子里,怎么数违规颜色

先说明属性:这是一篇笔试真题复盘,题目出自本地历史笔试资料整理,与任何公司的当前招聘无关。题意:一条 n 颗珠子串成的环形手串,每颗珠子可以无色,也可以涂若干种颜色,颜色共 c 种。要求是:任意一种颜色,在任意连续的 m 颗珠子里至多出现一次。

经典题解析:时针分针秒针,一天到底重合多少次

先说明属性:这是一篇经典题解析,题目出自本地历史面试资料整理,与任何公司的当前招聘无关。钟表重合题看着像脑筋急转弯,真正考的是你能不能把它翻译成相对速度的追及模型——会建模的人眼里,这题就是三道除法加一处边界判断。

经典题解析:把数组里的 0 全部移到尾部,还不能打乱顺序

先说明属性:这是一篇经典题解析,题目出自本地历史面试资料整理,与任何公司的当前招聘无关。原题要求写一个函数:把整型数组里的 0 全部移到末尾,其余非 0 整数移到前面且保持原有相对顺序,函数返回结果中第一个 0 的下标。