題目描述
編寫一個方法,找出兩個數字a和b中最大的那一個。
不得使用if-else或其他比較運算符。
算法思路
評論區有一個
((a + b) + abs(a - b)) // 2
數學上應該很容易看懂,但是貌似這用到了判斷,判斷abs(a - b)
是正還是負,所以可能不是那麼符合題意。
大佬們都是用位運算,位運算好難的,而且很難理解。
class Solution:
def maximum(self, a: int, b: int) -> int:
k=(a-b)&(2**33)
k=k>>33
return k*b+a*(k^1)
1.先看return語句,如果k==0,return值爲a;如果k==1,return值爲b
.也就是說,如果a>b,我應該令k=0,否則令k=1.現在的問題是如何確定k的值呢?
2.然後看第一和第二行。需要先了解int類型的存儲方式,這個網上搜得到。理解以後,繼續看:因爲a和b均爲int,也就是在的區間內,可以確定a-b在的區間內。
2.1 如果a-b<0,那麼a-b的左起33位必爲1,因此2{33}和a-b進行一個與操作得到2{33},記錄在k中。k右移33位得到1.
2.2 否則a-b>0,那麼a-b的左起33位必爲0。此時k的值爲0.
將步驟2和步驟1聯合起來看,得到答案。
作者:QcdxCtcc
鏈接:https://leetcode-cn.com/problems/maximum-lcci/solution/pythonmeng-xin-xiang-xiang-jie-chun-cui-wei-yun-su/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。