leetcode 626. 换座位---使用if分类讨论

换座位
又是一题看了答案才会的题,而且这题出现的几率还是蛮高的。
题目分析:题目给的表是这样的,
在这里插入图片描述
题目要求把邻近的座位互换,也就是1和2的座位互换,3和4座位互换,5没有互换的了,就不用换了。
才看起来,感觉完全没法上手,这没法解啊。我们从结果反推。
我们想要的结果应该是这样的

idstudent
1Doris
2Abbot
3Green
4Emerson
5Jeams

这样看起来还是不知道怎么做,我们再转换下结果的表

idstudent
2Abbot
1Doris
4Emerson
3Green
5Jeams

现在我们能看出什么?我们能看出的是我们直接将相邻的id进行互换就行了,不用考虑id上到底坐的是谁。那我们就有了整体的思路。

整体的思路是:对于表中是偶数的座位,说明两两配对能完全互换,那么是偶数的直接减一即可。奇数直接加一即可。
对于是奇数的座位,其中的偶数位还是一样的,不过会多出来一个奇数位,比如表中的5就是多出来的奇数,对于多出来的奇数就需要单独处理,不变。那么总结就是:对于id%2==0的id,id应该-1.对于id%2==1的而且不是最大的id的应该是id+1,剩下的保持不变。
上面的思路的实现逻辑如下:

select if(id%2=0,id-1,if(id%2=1 and id != (select max(id) from seat),id+1,id)) id,student from seat order by id;

提交结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值