复盘|第96场双周赛
最小公共值
【双指针】分离双指针,O(1)空间复杂度。
使数组中所有元素相等的最小操作数 II
【遍历】令a[i]=nums1[i]-nums2[i],则问题变成把每个a变成0的最小操作次数。k!=0时,得让所有a[i]变成0,每个a[i]必须是k的倍数。
最大子序列的分数
【堆】把nums1和nums2组合起来,按照nums2[i]从大到小排序,枚举nums2[i]作为序列的最小值,那么nums1只能在下标≤i的数中选,要选最大的k个数。
判断一个点是否可以到达
【位运算】考虑从终点(x, y)到起点(1,1),当x或y是偶数,可以变成奇数,x和y都是奇数时,如果x=y,则不能将x和y减少,此时x=y=1则到起点。x≠y时,由于x和y是奇数,x+y是偶数,可以将其中较大的坐标值减少,如果x>y,则(x,y) →(x +y, y)→(x+y/2, y),由于y < x+y/2 < x可以将横坐标减少。x<y时,(x,y) →(x, x + y)→(x, x + y/2),由于x < x+y/2 < y可以将横坐标减少。当x和y都是奇数且x≠y时,根据最大公约数的性质,gcd(x, y)=gcd(x+y, y)=gcd(x+y/2, y)=gcd(x, x+y) =gcd(x, x+y/2) ,因此上述操作之后,横坐标与纵坐标的最大公约数不变。当到达(1,1)时,横坐标与纵坐标的最大公约数是1,如果可以经过反向操作从(x,y)到达(1,1),则必有gcd(x,y)=1。当x和y都是奇数且x≠y时,如果gcd(x,y)=1,由于上述操作总是可以较大的坐标值减少,因此一定可以经过反向操作从(x,y)到达(1,1)根据上述分析可以得到,当x和y都是奇数且x≠y时,可以经过反向操作从(x,y)到达(1,1)等价于gcd(c,y)=1。当x和y中可能存在偶数时,由于总是可以将偶数除以2直到变成奇数,因此可以经过反向操作从(x,y)到达(1,1)等价于gcd(x,y)=2^t,其中t为非负整数。divisor为2的整数次幂,等价于divisor&(divisor - 1)的结果是0。