​LeetCode刷题实战603:连续空余座位

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 连续空余座位,我们先来看题面:

https://leetcode.cn/problems/consecutive-available-seats/

4e4d692a1d856c4853fc54c574f09bc1.png

891b69b69e77a82d33b1cf631ea780ff.png

解题

https://blog.csdn.net/qq_25886325/article/details/118635352

1、join

思路:只有一张表,需要通过seat_id自己连自己,条件是abs(c1.seat_id - c2.seat_id) = 1。

代码:

select

  distinct c1.seat_id

from cinema c1 join cinema c2

on abs(c1.seat_id - c2.seat_id) = 1 and c1.free = 1 and c2.free = 1

order by c1.seat_id;

2、row_number() over()

思路:

S1:使用窗口函数 row_number 对 cinema 进行排序,seat_id - row_number() over() as k ,如果座位连续,这组 k 值应该是相等的。

S2:将第一步和第二步的结果作为临时表 temp,将临时表 temp 按照 k 进行分组查询,并且筛选出大于 2 的 k 值

S3:从临时表 temp 中查询出 seat_id ,筛选出 k 值在第四步中的值

代码:

with temp as (

  select

    seat_id,

    seat_id - row_number() over() as k

  from cinema where free = 1

)

select seat_id from temp where k in (

  select k from temp group by k having count(*) >= 2

);

原文链接:https://blog.csdn.net/HeavenDan/article/details/123448972

上期推文:

LeetCode1-600题汇总,希望对你有点帮助!

LeetCode刷题实战601:体育馆的人流量

LeetCode刷题实战602:好友申请 II :谁有最多的好友

5d42e41b0c22eaf3aeafef3ec2e3a43f.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值