经典例题
weixin_41521306
这个作者很懒,什么都没留下…
展开
-
经典例题:判断一个数的二进制中1的个数;
下面分析几种思路 1.按照常规的十进制与二进制转换计算来说,例如一个数60; 给定一个计数器count,60里包含2的次方最大是2^5=32,count+1;剩下的数为60-32=28,28包含最大的2的次方是2^4=16,count+1;剩下的数为28-16=12,12包含2的次方最大是2^3=8,count+1;剩下的12-8=4,4包含2的次方最大是2^2=4;剩下的为4-4=0,结束。...原创 2019-01-11 15:16:16 · 2381 阅读 · 1 评论 -
替换空格经典例题
题目:将字符串中的空格替换成“%20”;要求时间复杂度为O(n); 分析:常规暴暴力法可以解决这个问题,思路为定义两个下标,一个首下标p,一个尾下标q;首下标p往后跑,遇到空格,尾下标q往前跑,直至与首下标p相等,依次把 把赋给下第两个单元(arr[q+2]=arr[q2],2为空格及“%20”长度的差),此时空出来三位,就依次赋值“2,0,%”,最后q回到现有字符串的最后位置,循序上步骤。这样...原创 2019-01-10 13:48:15 · 120 阅读 · 1 评论 -
不使用if switch方法判断两个数的大小
例如给定a=2;b=3; 判断a,b的大小性。 因为不能用判断语句,我们需要借助一些数学思想来间接的获取其中大的或者小的。 由此我们引入绝对值的思想,|a-b|的化简是要根据a、b的大小来确定,如果a>b,则|a-b|=a-b;如果a<b,|a-b|=-(a-b)=b-a; 由此性质,我们可以设计一个简短语句来间接的判断a,b的大小。 代码: int a=2;int b=3...原创 2019-01-08 21:29:14 · 2431 阅读 · 0 评论 -
不定义第三方变量,交换两个数的值
例如: int a=10,b=20; 给出三种方法: 1. a=a+b; b=a-b; a=a-b; //可能会存在a+b的值超过类型的大小,所以要谨慎。 2. a=a-b; b=a+b; a=b-a; 3. a=a^b; b=a^b; a=a^b; ^这个符号是按位异或; 但是这三个方法存在很深的bu...原创 2018-03-18 17:05:31 · 697 阅读 · 0 评论 -
几类经典例题的分析
1.关于计算进制的问题。 假设在n进制下,15*4=112,n的值为() A .6 B.7 C. 8 D.10 分析:像这个数值小的选择题情况下,大多数选择去代入选项再进行进制运算得出正解。 在此,介绍一种方法: 先按n进制展开得 : (n+5)*4=1*n^2+n+2 4n+20 =n^2+n+2 ...原创 2018-03-18 15:58:24 · 168 阅读 · 0 评论 -
不用加减乘除实现两个数相加
剑指offer:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 两个数不能用死则运算,那怎么办呢?首先肯定要想到可以用什么来模拟加法的过程,也就是说对数字进行更加底层操作--位运算 我们以4+9为例; 首先来看看十进制的加法如何进行:4+9=13(进而可以用二进制来模拟) 第一步,计算个位的值,不算进位,个位是3; 第二步,计算进位,得到10,如果这一...原创 2019-08-07 21:58:33 · 776 阅读 · 0 评论