NB189 牛群的编码统计
在一个农场中,农夫使用32位有符号整数的二进制字符串来编码他的牛群。有一天,农夫想要统计一下他的牛群中,编码中’0’的个数。现在,农夫给出了一头牛的编码 n,你需要帮他计算出编码中’0’的个数。(要考虑正数和负数)
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
public int countZeros (int n) {
int count = 0;
for(int i = 0; i < 32; i++){
count += (n>>i)&1;//和1相与得出1的个数
}
return 32-count;
}
}
NB190 编码反转
输入:
1
复制
返回值:
-2147483648
复制
说明:
00000000 00000000 00000000 00000001
翻转后为
10000000 00000000 00000000 00000000
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
public int reverseBits (int n) {
int ans = 0;
for(int i = 0; i < 32; i++){
ans <<= 1;
ans |= n&1;
n >>= 1;
}
return ans;
}
}
NB191用位运算实现乘法运算
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param a int整型
* @return int整型
*/
public int multiply (int n, int a) {
int res = 0;
while(a != 0){
if((a&1) == 1){
res = add(res, n);
}
n <<= 1;
a >>= 1;
}
return res;
}
int add(int a, int b){
while(b != 0){
int temp = a^b;
b = (a & b) << 1;
a = temp;
}
return a;
}
}
扩展:获取数字中最右侧的1 n&(~n+1)或者n&(-n)
判断2的幂——小于0不对,return n&(-n)==n;
判断4的幂——先判断是2的幂 return (n&oxaaaaaaaa)==0;
输出大于等于n的2的幂——小于0输出1,2的幂输出,n|=n>>1/2/4/8/16把最高位后面都变成1 return n+1;
异或中:n^n=0
leetcode 260
给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
class Solution {
public int[] singleNumber(int[] nums) {
int xorsum = 0;
for (int num : nums) {
xorsum ^= num;
}
// 防止溢出 如果是一个元素return xorsum;
int lsb = (xorsum == Integer.MIN_VALUE ? xorsum : xorsum & (-xorsum));
int type1 = 0, type2 = 0;
for (int num : nums) {
if ((num & lsb) != 0) {
type1 ^= num;
} else {
type2 ^= num;
}
}
return new int[]{type1, type2};
}
}
NB194 有些牛被标记了三次,有一个牛标记一次,找出标记一次的。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int singleNumberII (int[] nums) {
int ones = 0, twos = 0;
for(int n : nums){
ones = (ones ^ n) & ~twos;
twos = (twos ^ n) & ~ones;
}
return ones;
}
}