1.数组拆分
给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。
返回该 最大总和 。
方法一:排序
#方法一:排序
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 ,输出它的补数。
方法一:位运算
#方法一:位运算
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 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。
方法一:位运算
#方法一:位运算
def hasAlternatingBits(n):
while n:
t=n&1 #拿到最右边的数字
n>>=1 #右移动
if t==(n&1):
return False #判断相邻数字是否相同
return True