python奇数位丢弃_位运算有什么奇技淫巧?

作为一名不会sql的商科学生,在毕业即失业的恶势力下

低头在LeetCode刷数据库……

期间有幸遇到几次位运算,留下了深刻的印象,并被它的巧妙所折服。

第一题:620.有趣的电影

某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。

作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。

例如,下表cinema:

+---------+-----------+--------------+-----------+

| id | movie | description | rating |

+---------+-----------+--------------+-----------+

| 1 | War | great 3D | 8.9 |

| 2 | Science | fiction | 8.5 |

| 3 | irish | boring | 6.2 |

| 4 | Ice song | Fantacy | 8.6 |

| 5 | House card| Interesting| 9.1 |

+---------+-----------+--------------+-----------+

对于上面的例子,则正确的输出是为:

+---------+-----------+--------------+-----------+

| id | movie | description | rating |

+---------+-----------+--------------+-----------+

| 5 | House card| Interesting| 9.1 |

| 1 | War | great 3D | 8.9 |

+---------+-----------+--------------+-----------+

来源:力扣(LeetCode)

链接:力扣

涉世未深的我,

一边吐槽着为啥要找奇数的片子

一边用mod(id,2)=1做出了答案

然后照惯例欣赏评论区的大佬答案

于是接下来我就有了第一次和位运算接触的经历:

id & 1

这个简洁的表达一下子就吸引了我,看了别人的解释我才直到原来这是位运算,二进制中,偶数最后一位是0,奇数是1,按位运算的话,0&1就是0,1&1就是1

至此,我对这种神秘又精简的运算方法留下了深刻的印象,

于是乎马上我又遇到了它,而这一次它真正的震撼了我哈哈哈哈~

第二题 626.换座位

小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。其中纵列的 id 是连续递增的,小美想改变相邻俩学生的座位。

你能不能帮她写一个 SQL query 来输出小美想要的结果呢?

示例:

+---------+---------+

| id | student |

+---------+---------+

| 1 | Abbot |

| 2 | Doris |

| 3 | Emerson |

| 4 | Green |

| 5 | Jeames |

+---------+---------+

假如数据输入的是上表,则输出结果如下:

+---------+---------+

| id | student |

+---------+---------+

| 1 | Doris |

| 2 | Abbot |

| 3 | Green |

| 4 | Emerson |

| 5 | Jeames |

+---------+---------+

注意:

如果学生人数是奇数,则不需要改变最后一个同学的座位。

来源:力扣(LeetCode)

链接:力扣

本渣第一次看到这题毫无头绪,满脑子想着根据奇偶分开处理,直到我看到评论区的大佬用位运算一笔带过……

select rank() over(order by (id-1)^1) as id,student from seat大佬用与1 异或,将奇数偶数互换,又用-1对最后一行为奇数行的情况进行处理。

直接秒杀!!!

你可能感兴趣的:(python奇数位丢弃)