位运算 位运算就是基于整数的二进制表示进行的运算。理解位运算首先要理解二进制。位运算总共只有5种运算:与(&)、或(|)、异或(^)、左移( )。 异或运算 维基百科中对「异或」的解释: 在逻辑学中,逻辑算符异或(exclusive or)是对两个运算元的一种逻辑析取类型,符号为 XOR 或 EOR ...
                            
                            
                                分类:
其他好文   时间:
2020-04-06 23:39:31   
                                阅读次数:
69
                             
                    
                        
                            
                            
                                    LeetCode 第 183 场周赛 5376. 非递增顺序的最小子序列 降序排列后,往 中添加元素,直到其和超过所有元素和的一半。 5377. 将二进制表示减到 1 的步骤数 注意有500位,暴力模拟即可。 5379. 石子游戏 III 表示从 i 开始先手的最优情况, 是先手的值, 是后手的值。 ...
                            
                            
                                分类:
其他好文   时间:
2020-04-05 13:18:43   
                                阅读次数:
52
                             
                    
                        
                            
                            
                                    POJ-3252——Round Numbers 传送门:http://poj.org/problem?id=3252 题意:求n-m中二进制表示0的数量不小于1的数的个数 要找二进制0和1的个数,因为是按位数来找的,可以考虑数位dp 状态dp[pos][_0][_1] 表示为dp[当前第几位][含0 ...
                            
                            
                                分类:
其他好文   时间:
2020-04-04 21:05:13   
                                阅读次数:
68
                             
                    
                        
                            
                            
                                    PAT乙级: 1057 数零壹 (20分) 题干 给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a z 对应序号 1 26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0、多少 1。例如给定字符串 ,其字母序号之和为:16+1+20+2 ...
                            
                            
                                分类:
其他好文   时间:
2020-04-04 14:36:07   
                                阅读次数:
71
                             
                    
                        
                            
                            
                                    一道线段树染色,但是这里是桶,我犯了经验主义以为是覆盖问题 数据不大,用二进制表示即可 #include<iostream> #include<algorithm> #include<stack> #include<vector> #include<cstring> using namespace  ...
                            
                            
                                分类:
其他好文   时间:
2020-03-28 18:06:45   
                                阅读次数:
64
                             
                    
                        
                            
                            
                                    // 面试题15:二进制中1的个数 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如 // 把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。 #include <cstdio> int NumberOf1_Solution1(int n) { //主 ...
                            
                            
                                分类:
其他好文   时间:
2020-03-23 23:35:17   
                                阅读次数:
131
                             
                    
                        
                            
                            
                                    1.求二进制数中1的个数(题目与解法均来自《编程之美》第二章) 题目:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高。 解法1:举一个8位二进制的例子来分析,对于二进制操作,我们知道,除以一个2,原来的数字就会少个0,如果除的过程中有余,那么就表示当前位置 ...
                            
                            
                                分类:
编程语言   时间:
2020-03-15 19:00:17   
                                阅读次数:
78
                             
                    
                        
                            
                            
                                八、位运算 1. 二进制中1的个数 题目描述: ?	输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路: 常规解法: ?	首先把n和1做与运算,判断n的最低位是不是1。接着把n左移一位,再和n做与运算,判断次低位是不是1……这样反复左移,就能从右至左依次判断n的每一位是不是1。  ...
                            
                            
                                分类:
其他好文   时间:
2020-03-14 17:05:18   
                                阅读次数:
57
                             
                    
                        
                            
                            
                                题意大概是就是标题所说,不过特别需要注意这里有一个坑,就是输入的整数也可能是负数,而C++负数表示为高位全部为1,如-2表示为111...10(32位),所以如果输入-2,输出1的个数为31。 因此我们肯定不能简单地右移n,这会导致左边高位不断补1,最后陷入死循环(负数不断右移不会为0) 第一种办法 ...
                            
                            
                                分类:
其他好文   时间:
2020-03-13 18:49:17   
                                阅读次数:
49
                             
                    
                        
                            
                            
                                    11. 二进制中1的个数 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 法一: 不断向右移位,与 1做与运算,如果为1,则加一,如果 为0,则不变, int 整数共有 32位,所以循环 31次 public class Solution { public int Num ...
                            
                            
                                分类:
其他好文   时间:
2020-03-11 23:25:15   
                                阅读次数:
64