lintcode-1937 · 连续的空箱子

举报
搞前端的半夏 发表于 2021/11/30 22:32:45 2021/11/30
【摘要】 大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界! 描述某处摆放着一些标有 id 的箱子,其中部分箱子是装有东西的,部分箱子是空闲的。请编写 SQL 语句,找到空且连续的箱子,并将它们按照 id 递增排序...

大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界!

描述

某处摆放着一些标有 id 的箱子,其中部分箱子是装有东西的,部分箱子是空闲的。
请编写 SQL 语句,找到空且连续的箱子,并将它们按照 id 递增排序后返回。

表定义: boxes (箱子表)

列名 类型 注释
id int 主键
is_empty int 箱子状态 (0 表示箱子占用,1 表示箱子空闲可用)

**

提示:

  1. 连续空箱子是指:空的且连续的箱子 ≥ 2 个
  2. 数据保证 is_empty 的值为 0 或者 1
  3. 箱子们的 id 都是连续的

样例

样例一:

表内容: boxes

id is_empty
1 1
2 0
3 1
4 1
5 1

在运行你的 SQL 语句之后,表应返回:

id
3
4
5

样例二:

表内容: boxes

id is_empty
1 1
2 0
3 1
4 1
5 0

在运行你的 SQL 语句之后,表应返回:

id
3
4

题解

这道题的重点是什么呢?连续。连续的定义是什么1,2,3,4这样就是一个连续的id,这些数之间的联系就在于他们相差1。如果表示相差1,b-a=1,是不是就可以了。这里还有一个点就是distinct 去重,为啥需要去重呢。因为 abs(b1.id - b2.id)=1,这里的abs是为了b1.5取不到的问题,如果没有abs,那么最多取到4.但是一旦用abs相当于跑了两边for,一定会重复,所以这里需要去重。

select distinct  b1.id
from boxes b1, boxes b2
where abs(b1.id - b2.id)=1 and b1.is_empty=1 and b2.is_empty=1 order by b1.id

``
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。