- 博客(5)
- 资源 (1)
- 收藏
- 关注
原创 求数的二进制表示中的1的个数
三种方法 int numberOf1(int n){ int count=0; while(n){ if(n&1) count++; n=n>>1; } return count; }//第一种 int NumerOf1(int n){ int count=0; unsiged int flag=1; while(flag){ if(n&flag){ count++;
2017-05-16 12:04:56 213
原创 求出有序数组旋转后的最小值
思路:比如123456旋转之后为456123 那么第一个数字肯定大于或者等于最后一个数字,设置两个指针index1和index2,分别指向第一个数和最后一个数,然后求出中间的数,如果中间的数大于第一个数,说明最小的在中间的后面,将index1指向中间的数,否则将index2指向中间的数,缩小查找范围,当Index2在index1后面,就是index2-index1=1的时候,最小的数字就是Inde
2017-05-16 10:53:48 316
原创 不用“+”号实现两个数的相加
可以使用位操作实现: 第一步:若将两个二进制数加一起,但忘记进位,只要a和b的第i位相同,总和的第i位就是0,相当于异或操作; 第二部:若将两个数加在一起,但只进位,只要a和b的i-1位皆为1,总和的第i位就为1,实质上是and加上移位操作; 第三步:递归执行前两步,直到没有进位为止; public static int add(int a,int b){ if(b==0) retur
2017-05-09 10:14:02 697
原创 有个排序后的字符串数组,其中散步着一些空字符串,找出给定字符串的位置
public int searchR(String[] strings,String str,int first,int last){ if(first>last) return -1; int mid=(first+last)/2; if(strings[mid].isEmpty()){ int left=mid-1; int right=mid+1; while(true){ i
2017-05-03 14:41:56 327
原创 给定两个32位的整数n和m,将m插进n的j到i的位置,n其他位置不变
int updateBits(int n,int m,int i,int j){ int allones=~0;//等同于一连串的1 int left=allones int right=((1 //在位置i之后的位置都为1 int mask=left|right;//除i到j的位置为0,其余均为1 int n_cleared=n&mask;//清楚位置j到i的位置 int m_sh
2017-05-01 11:20:10 544
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人