2021-07-30力扣算法题(10)位操作

69-Sqrt(x)

//返回x的平方根,其中x非负数,返回类型是整数,结果只保留整数部分,小数部分被舍去 //从1检验到x/2

class solution69{
		public int mySqrt(int x) {
			if(x==1)return 1;
			long i=1;
			for(i=1;i<=x/2;i++) {
				if(i*i>x) {
					return (int)i-1;
				}
			}
			return (int)i-1;
		}
		//方法2,可以用二分查找来找
		//因为从0开始可以构成一个升序序列二分查找的范围是[1,x/2]要对x<4做特殊处理
		public int mySqrt2(int x) {
			if(x<=4) {
				if(x==4) {
					return 2;
					}else {
						return 1;
					}
			}
			int left=1;
			int right=x/2;
			while(left<right) {
				int mid=(left+right)/2;
				if(mid*mid<x) {
					right=mid;
				}else {
					left=mid;
				}
			}
			return left;
		
		}
		public int mySqrt02(int x) {
			if(x<2) {
				return x;
			}
			
			int l=0,r=x/2;
			while(l<r) {
				//右偏,使得<=可以整合到一起
				int m=l+(r-l+1)/2;
				if(m>x/m) {
					r=m-1;
				}else {
					l=m;
				}
			}
			return l;
		}
	}

421-Maximum XOR of Two Numbers in an Array (位的异或)
136-Single Number (位的异或)
137-Single Number II (重要!)
260-Single Number III (136题的升级,注意查看二进制位的相关操作)
201-Bitwise AND of Numbers Range
190-Reverse Bits
191-Number of 1 Bits (注意与190题相似的整体位操作解法)
461-Hamming Distance
371-Sum of Two Integers (无符号实现±*运算,位操作的基本操作)
169-Majority Element
338-Counting Bits
187-Repeated DNA Sequences
476-Number Complement

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值