力扣刷题 day52:10-22

1.数组拆分

给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。

返回该 最大总和 。力扣刷题 day52:10-22_第1张图片

方法一:排序 

#方法一:排序
def arrayPairSum(nums):
    nums.sort() #从小到大排序
    return sum(nums[i] for i in range(0,len(nums),2)) #隔一个取一个求和

2.数字的补数 

对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。

例如,整数 5 的二进制表示是 "101" ,取反后得到 "010" ,再转回十进制表示得到补数 2 。
给你一个整数 num ,输出它的补数。力扣刷题 day52:10-22_第2张图片

方法一:位运算 

#方法一:位运算
def findComplement(num):
    s=num #补数加原数加一可得到2的i次幂,比较得到大于原数且最接近的2的i次幂,减去原数再减一即得补数
    t=1 #t用来记录与num同位的最大二进制数
    while s>0:
        t<<=1 
        s>>=1 #不断右移
    return num^(t-1) #异或求出补数

3.交替位二进制数 

给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。

力扣刷题 day52:10-22_第3张图片

方法一:位运算 

#方法一:位运算
def hasAlternatingBits(n):
    while n:
        t=n&1 #拿到最右边的数字
        n>>=1 #右移动
        if t==(n&1):
            return False #判断相邻数字是否相同
    return True

你可能感兴趣的:(力扣刷题,leetcode,算法,职场和发展)