最少点字典序最短路径_LeetCode 89,因为题目晦涩而被点了1500+反对的搜索问题...
本文始发于个人公众号:TechFlow,原创不易,求个关注
今天是LeetCode专题第55篇文章,我们一起来看看LeetCode中的第89题 Gray Code(格雷代码)。
这题的官方难度是Medium,通过率是48.9%,点赞639,反对1545。又是一道反对比点赞多得多的题目,我个人发现其实这些反对很多的题目都有一个特点,就是题意比较晦涩,出题人的意图不太容易get到。不知道是不是老外理解能力不太行,所以都给出了这么多的反对。
我们就来看看这道题的真面目吧。
题意
题目中说gray code,格雷码是一连串n位二进制表示的数字。这一串的数字有一个特点就是第一个数字是0,从0开始后面的每一个数字和前一个数字只有一个二进制位不同。
题目会给定我们一个非负整数n,要求我们生产n位的灰色代码,也就是产生这些数字。并且这些数字是以10进制存储的。
不知道大家看明白没有,我们来看一个样例。
样例
Input: 2
Output: [0,1,3,2]
在上面这个例子当中,输入是2,表示这些数字是两位二进制位构成的,输出是[0, 1, 3, 2]。我们把0,1,3,2翻译成二进制,0是00,1是01,3是11,2是10。排列在一起的话就是00, 01, 11, 10。我们可以发现每一个数和前一个数相差的都是一个二进制位。
题目当中相关的描述就这么多,但其实有很多隐藏的信息没有给,要我们自己猜测。比如说每一个数字只能出现一次,不然的话这个序列就是无穷无尽的。另外一个隐藏信息是,这样的序列应该也不是唯一的,但是题目并没有说是否所有合法的序列都可以通过测试,还是说一定要返回字典序最小的结果。
题目比较晦涩也就算了,这些隐藏信息没有交代清楚,也难怪大家会费解。
题解
当然以上的问题其实也不是事,我们不确定试一次也就知道了,核心还是怎么想出解法来。
干想是没有结果的,还是要先分析搜集一些信息。首先,题目给定的n,限制了每个数能够使用的二进制位的数量。n个二进制位一共能表示的数字有
所以问题的关键就是要寻找这样一个序列,根据我们之前解全排列以及各种排列的方法,可以联想得到,这大概率是一个搜索问题。
顺着搜索的思路继续往下,剩下的事情就容易了,我们的起始搜索点是0。题目中要求了每两个相邻的数的二进制位只相差一个,那么我们可以遍历这些二进制位,寻找0的后继节点。同样对于每一个后继节点来说,我们都可以用同样的方法寻找它的后继们。再加上gray code不能包含重复的元素,我们可以在搜索的时候加上剪枝。
这一套其实是一个经典的搜索问题的流程。
如果我们换个思路,虽然也能得到一样的解法,但是思考的过程会不太一样。怎么换思路呢,其实也简单,我们把它想象成一个图论问题。也就是说,每一个数字都是图中的一个节点。如果两个数字之间满足只相差了一个二进制位,那么说明它们之间有一条边相连。整个问题就转变成了我们从0这个点出发,找出所有连通的节点。
对于图上的遍历问题,方法就很固定了就是搜索。也就是说从这个角度思考的话,更加容易想到搜索上面了, 整个思考的链路会更短。这也是为什么很多大神建模的时候喜欢从往图上考虑的原因。
这些都想明白了再来写代码真的就水到渠成了,整个核心代码真的不长:
class
总结
单纯从思路以及最后的AC代码来看的话,这道题难度应该是很低的,实际上也的确如此,这题的通过率接近50%,已经是Medium难度的下届了。但是相比于做对这题而言,更加重要的是思路。以图论的思维来抽象建模是算法题当中一个非常常见的手段,这是比题目本身更加宝贵的东西。
如果你读过昨天的文章的话,会发现昨天的87题,本质上也是用的一个图论建模的方法。但是从表现形式上来说,这两题真的可以说是完全不一样。建议大家能好好做做这两题,体会一下其中思维和解法的闪光点。
今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。
最少点字典序最短路径_LeetCode 89,因为题目晦涩而被点了1500+反对的搜索问题...相关推荐
- 魔众题库系统 v6.4.0 题目导入优化 自动阅卷优化 后台菜单快捷搜索
魔众题库系统基于PHP开发,可以用于题库管理和试卷生成软件,拥有极简界面和强大的功能,用户遍及全国各行各业. 魔众题库系统发布v6.4.0版本,新功能和Bug修复累计14项,题目导入优化 自动阅卷优化 ...
- 百度2016/2017秋招部分题目解析
今天把百度2016/2017秋招剩余的4星题目,以及少部分有难度或者比较有趣味的3星题目来一起分析下,所以这次就来个合集了(共包含了4个题目),总体来看题目比较简单,所以分析也会写得相对简略一些.尽管 ...
- 【Floyed】廉价最短路径
廉价最短路径 题目大意: 一个图中,在满足最短路的前提下,求最小代价 原题: 题目描述 图是由一组顶点和一组边组成的.一条边连接两个顶点.例如,图1表示了一个有4个顶点V.5条边的图.图中,每条边e是 ...
- ccf-csp 2013-2015题目总结
目 录 2013-12 出现次数最多的数 ISBN号码 最大的矩形 有趣的数 I'm stuck!⭐ 2014-03 相反数 窗口 命令行选项 无线网络 任务调度⭐ 2014-09 相邻数对 画图 字 ...
- 容器里有10升油,现在只有两个分别能装3升和7升油的瓶子,需要将10 升油等分成2 个5 升油。程序输出分油次数最少的详细操作过程
引入 1.容器里有10升油,现在只有两个分别能装3升和7升油的瓶子,需要将10 升油等分成2 个5 升油.程序输出分油次数最少的详细操作过程. 思考 这题主要是要求了输出分油次数最少的操作,网上很多算 ...
- Leetcode刷题——每日一题题目汇总
系列文章目录 文章目录 系列文章目录 查找遍历 169. 多数元素 219. 存在重复元素 II 717. 1比特与2比特字符 917. 仅仅反转字母 1725. 可以形成最大正方形的矩形数目 排序 ...
- 城市交通导航最短路径查询
导航最短路径查询系统 上学期期末老师让写一个课程设计,给了很多课题,选了导航最短路径查询系统,题目如下: 1 项目简介 设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一个城市顶点之间的最短路径 ...
- 最短路径:Dijkstra、BellmanFord以及SPFA算法
最短路径问题 1.Dijkstra算法 简介 (1)Dijkstra算法伪代码 (2)C++ 邻接表版代码 (3)优化 (4)题型分析 2.Bellman Ford算法 简介 (1)Bellman算法 ...
- 【常用算法总结——最短路径四种方法】
以下转自https://blog.csdn.net/weixin_42060896/article/details/82216379 例题:HDU 2544 最短路 Time Limit: 5000/ ...
最新文章
- 【阿圆实验】Consul HA 高可用方案
- 告别视频通话“渣画质”,英伟达新算法最高压缩90%流量
- 从入门到精通的Java进阶学习笔记整理,不愧是大佬
- C# 仿金山毒霸启动和关闭淡入淡出效果
- cnetos6,centos7添加新网卡,系统不识别的解决办法
- Oracle11gR2在9x8hk..Windows18669144449 命名进入Oracle
- OpenCV学习笔记七-创建滑动条
- Spring Cloud是什么,和Dubbo对比呢?
- webgl 基础渲染demo_WebGL + ThreeJS 实现实时水下焦散 Part 1
- 16.04编译android 7.0,ubuntu16.04 编译Android5.1报错
- Kaggle新赛 | 医学影像插管分类,总奖池 5 万美金
- angularjs获取上一个元素的id_DOM(1)-DOM概念和获取元素
- PHP curl函数制 exec_ch和get_headers
- HLW8032做220V电量采集方案测试
- 解决TCP延迟应答(Delay ACK)问题的3个小Trick
- docker容器内启动mysql服务,报错:New main PID 99 does not belong to service, and PID file is not owned by root.
- 今日科技联播:美股暴跌引全球股市崩盘;腾讯跌出全球市值前十
- 安装java的心得体会_java实训心得体会范文
- 农业借助拼多多的东风实现数字化-纽黑文教育
- 怎样理解心藏神,肝藏魂,脾藏意,肺藏魄,肾藏精志?
热门文章
- 使用ssl_exporter监控K8S集群证书
- 黑客如何让脚本定时执行
- 非法关机的时候,postgresql启动故障的解决
- Tomcat和Weblogic的区别
- 使用Excel公式,获取 当前 Excel 的Sheet页 的 名字
- python中gensim内没有summarization的问题
- linux dd克隆系统后,Ubuntu14.04 dd命令克隆系统镜像安装到另一台机器上
- php 变量传给另外一个函数,将在一个函数中创建的PHP变量传递给另一个
- 学了java然后深入_JAVA8学习——从源码角度深入Stream流(学习过程)
- 解决Mybatis-plus高版本不向后兼容的问题