题目描述:

image-20250112235120699


按位与 解释

参加运算的两个数,按二进制位进行“与”运算。

运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)

即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。

例:3 &5 即 00000011 & 00000101 = 00000001 ,所以 3 & 5的值为1。

原文链接:https://blog.csdn.net/wan_ide/article/details/81108941


解析:根据官解提示2,问题转为找到在给定整数数组中所有数字的二进制表示下,拥有最多1的位的位置上1的数量。

75ec614fc1881dc638ed1ee1aef9a8c


代码:

package January;

/**
* @author hxw
* @version 1.0
* @date 2025/1/13 20:23
* @description: 2275 按位与结果大于零的最长组合 中等
*/
public class thirteen {
public static void main(String[] args) {
int i = Solution.waysToSplitArray(new int[]{2, 3, 1, 0});
System.out.println(i);
}

class Solution {
public static int waysToSplitArray(int[] nums) {

int n = nums.length;
long left = 0, right = 0;
for (int num : nums) {
right += num;
}
int count = 0;
for (int i = 0; i < n - 1; i++) {
left += nums[i];
right -= nums[i];
if (left >= right) {
count++;
}
}
return count;
}
}
}

注:在Java中,整数类型(如 int)是可以进行按位运算的,

  • 如果 x 的最低位是1,那么 x & 1 的结果将是1。
  • 如果 x 的最低位是0,那么 x & 1 的结果将是0。