笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应
出题:输入一个整数,要求计算此整数的二进制表示中1的个数
分析:
- 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位;当其位整数的时候,则k/2表示将其二进制表示右移一位,k%2 ==0表示其是否是偶数,如果不是则说明当前二进制表示的最右边一位为1,当k==0成立的时候移位结束;
- 另外还可以使用‘消1’的方法,如果二进制表示A为'****1000',则A-1为'****0111',也就是我们仅关注二进制表示最右边的第一个 1,这样的话A&(A-1)的结果就可以将最右边的第一个1开始往右边的所有位都清除为0,'****0000';所以没进行一次处理就消除一个 1,直到整个数字为0,则A&(A-1)进行的次数就是1的个数;
- 另外可以使用空间换时间的策略,将int所有取值所对应的1的个数存储为一个数组,则直接取数组值就可以得到;
解题:
int count1Binary(int k) {
int count=;
if(k<) {
/**
* 针对负数的情况,使用1<<i可以每次检测k的一个
* 位上是否为1,移动次数为sizeof(int),也可以
* 使用while(i){………, i=i<<1}这样当1溢出的时候
* 就是0,也就是结束的时候
* */
int limit=sizeof(int)*;
printf("the size of int is: %d",limit);
for(int i=;i<limit;i++) {
if((k & ( << i)) != ) count++;
}
}
while(k>) {
/**
* 此判断条件可以替换为 k&1 == 1
* */
if(k% == ) {
count++;
}
/**
* 移位操作可以替换为 k>>1
* 可以获得更高运算效率
* */
k/=;
}
return count;
}
int count1Binary2(int k) {
int count=;
while(k) {
k=k&(k-);
count++;
}
return count;
}
int main() {
printf("\n%d\n", count1Binary(-));
printf("\n%d\n", count1Binary2(-));
return ;
}
出题:判断stack的push和pop序列是否对应,push和pop可能交替发生
分析:例如:push序列"1,2,3,4,5",pop序列"4,5,3,2,1"
解题:
/**
* 由于当前pop出去的元素肯定位于堆栈的栈顶,所以可以根据
* 这个性质,用push中的元素重建堆栈,创建tempStack,则
* 当前pop出去的元素要么已经位于tempStack的栈顶,要么还
* 在push序列中,如果是后者则需要将对应元素之前的元素都压入
* tempStack。所以如果上述两种情况都没有发生,则失败;如果
* 最终的pop序列和push序列都遍历完全,tempStack非空,则返
* 回true,否则返回失败。
* */
bool judgePushPopSeq(int *push, int pushL, int *pop, int popL) {
MyStack *tempStack=new MyStack();
int pushI=, popI=;
int temp;bool isFound;
while(true) {
isFound=false;
if(tempStack->peek(&temp) && temp==pop[popI]) {
isFound=true;
tempStack->pop(NULL);
popI++;
} else {
for(int i=pushI;i<pushL;i++) {
if(push[i] == pop[popI]) {
for(int j=pushI;j<i;j++) {
tempStack->push(push[j]);
}
pushI=i++;
popI++;
isFound=true;
break;
}
}
}
if(!isFound) {
delete tempStack;
return false;
}
if(popI==popL && pushI==pushL && tempStack->isEmpty()) {
delete tempStack;
return true;
} else {
delete tempStack;
return false;
}
}
}
笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应的更多相关文章
- 栈的push、pop序列 【微软面试100题 第二十九题】
题目要求: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1是该压栈 ...
- 每天一道算法题(11)——栈的push、pop 序列
题目:输入两个整数序列.其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序.为了简单起见,我们假设push 序列的任意两个整数都是不相等的. 例如:输入的push 序列是 ...
- 算法题14 小Q歌单,牛客网,腾讯笔试题
算法题14 小Q歌单,牛客网,腾讯笔试题 题目: 小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌 ...
- 【算法题 14 LeetCode 147 链表的插入排序】
算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...
- 笔试算法题(33):烙饼排序问题 & N!阶乘十进制末尾0的个数二进制最低1的位置
出题:不同大小烙饼的排序问题:对于N块大小不一的烙饼,上下累在一起,由于一只手托着所有的饼,所以仅有一只手可以翻转饼(假设手足够大可以翻转任意块数的 饼),规定所有的大饼都出现在小饼的下面则说明已经排 ...
- 笔试算法题(29):判断元素范围1到N的数组是否有重复数字 & 计算整数的7倍
出题:一个长度为N的数组,其中的元素取值范围是1到N,要求快速判断数组是否存在重复数字: 分析: 解法1:如果N个元素的范围都是在1到N,所以如果没有重复元素,则每一个位置恰好可以对应数组中的一个元素 ...
- 笔试算法题(05):转换BST为双向链表 & 查找栈中的最小元素
出题:把二元查找树转变成排序的双向链表.输入一棵二元查找树,要求将该二元查找树按照中序转换成一个排序的双向链表,要求不能创建任何新的节点,只能调整指针的指向: 分析: 递归的思路,当前节点需要进行的处 ...
- 前端如何应对笔试算法题?(用node编程)
用nodeJs写算法题 咱们前端使用算法的地方不多,但是为了校招笔试,不得不针对算法题去练习呀! 好不容易下定决心 攻克算法题.发现js并不能像c语言一样自建输入输出流.只能回去学习c语言了吗?其实不 ...
- 《剑指offer》-统计整数二进制表示中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 直观思路就是把二进制表示从右往左统计1的个数.直接想到移位操作来迭代处理.坑点在于负数的移位操作会填充1.有人贴出了逻辑移位 ...
随机推荐
- TransposonPSI——转座子分析的入门自学
最近需要做转座子分析,查找发现可以使用 TransposonPSI 来进行分析.但是登陆官网,该软件 update 时间为 2013 年,但是因为时间紧迫,暂时还没有进行其他方法的调研,所以先选用该软 ...
- java面试(上)
http://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是 ...
- bzoj 4080: [Wf2014]Sensor Network【瞎搞+随机化】
参考:https://blog.csdn.net/YihAN_Z/article/details/73380387 一点都不想写正解.jpg random_shuffle一下然后贪心的加点,和ans取 ...
- bzoj 1912: [Apio2010]patrol 巡逻【不是dp是枚举+堆】
我是智障系列.用了及其麻烦的方法= =其实树形sp就能解决 设直径长度+1为len(环长) 首先k=1,直接连直径两端就好,答案是2*n-len 然后对于k=2,正常人的做法是树形dp:先求直径,然后 ...
- bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】
首先化简,题目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 \[ G^{\sum_{i|n}C_{n}^{i} ...
- flask框架基础入门一
首先:flask是一个基于Werkzeug,Jinja2的一个python的微服务框架. 安装flask框架: pip install flask 一个最小的最简单的flask应用: from fla ...
- Lightoj 1090 - Trailing Zeroes (II)
题目连接: http://www.lightoj.com/volume_showproblem.php?problem=1090 题目大意: 给出n,r,p,q四个数字1<=n,r,p,q< ...
- Service官方教程(9)绑定服务时的注意事项
Binding to a Service Application components (clients) can bind to a service by calling bindService() ...
- C#关于html颜色值的转化 ColorTranslator
//颜色转换非常重要快速的转换类. ColorTranslator.FromHtml (); //从html字符串得到颜色 ColorTranslator.ToHtml();
- Oracle代码 规则 创建表 表空间 用户等
-----创建表空间----------create tablespace bdccslogging datafile 'D:\oracle\product\10.2.0\oradata\bdccs\ ...