bitmapping
来源:互联网 发布:linux服务器性能监控 编辑:程序博客网 时间:2024/06/14 09:21
268. Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3]
return 2
.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
自己的解法: 排序,相邻相差不是1的位置是丢失的数
class Solution {public: int missingNumber(vector<int>& nums) { int n=nums.size(); sort(nums.begin(),nums.end()); if(nums[0]==1) return 0; for(int i=0;i<nums.size()-1;i++) { if(nums[i+1]-nums[i]!=1) return nums[i+1]-1; } return n; }};使用位运算,用抑或,出现两次的数会是0,最后与size()抑或可得丢失的数
338. Counting Bits
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.
Example:
For num = 5
you should return [0,1,1,2,1,2]
.
Follow up:
- It is very easy to come up with a solution with run time O(n*sizeof(integer)). But can you do it in linear time O(n) /possibly in a single pass?
- Space complexity should be O(n).
- Can you do it like a boss? Do it without using any builtin function like __builtin_popcount in c++ or in any other language.
这道题主要的思路是使用之前的结果:
有几种公式:
f[i] = f[i >>1] + (i & 1)
ret[i] = ret[i&(i-1)] + 1;
class Solution {public: vector<int> countBits(int num) { vector<int> ret(num+1,0); for(int i=1;i<=num;i++) { ret[i]=ret[i&(i-1)]+1; } return ret; }};
461. Hamming Distance
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x
and y
, calculate the Hamming distance.
Note:
0 ≤ x
, y
< 231.
Example:
Input: x = 1, y = 4Output: 2Explanation:1 (0 0 0 1)4 (0 1 0 0) ? ?The above arrows point to positions where the corresponding bits are different.
class Solution {public: int hammingDistance(int x, int y) { int res=0; while(x||y) { int temp1=x&1; int temp2=y&1; if(temp1!=temp2) res++; x>>=1; y>>=1; } return res; }};
476. Number Complement
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
- The given integer is guaranteed to fit within the range of a 32-bit signed integer.
- You could assume no leading zero bit in the integer’s binary representation.
Example 1:
Input: 5Output: 2Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Example 2:
Input: 1Output: 0Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output
求一个数的补class Solution {public: int findComplement(int num) { int res=0; int i=0; while(num) { int temp=num&1; temp=temp?0:1; res+=temp<<i; i++; num>>=1; } return res; }};
其他好的方法:class Solution {public: int findComplement(int num) { unsigned mask = ~0; while (num & mask) mask <<= 1; return ~mask & ~num; }};
371. Sum of Two Integers
Calculate the sum of two integers a and b, but you are not allowed to use the operator +
and -
.
Example:
Given a = 1 and b = 2, return 3.
不使用加减号做加法
class Solution {public: int getSum(int a, int b) { //两个数相加,一0一1的位置成为1,都是1的位置需要进位 return b==0?a:getSum(a^b,(a&b)<<1); }};
405. Convert a Number to Hexadecimal
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.
Note:
- All letters in hexadecimal (
a-f
) must be in lowercase. - The hexadecimal string must not contain extra leading
0
s. If the number is zero, it is represented by a single zero character '0'
; otherwise, the first character in the hexadecimal string will not be the zero character. - The given number is guaranteed to fit within the range of a 32-bit signed integer.
- You must not use any method provided by the library which converts/formats the number to hex directly.
Example 1:
Input:26Output:"1a"
Example 2:
Input:-1Output:"ffffffff"
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x
and y
, calculate the Hamming distance.
Note:
0 ≤ x
, y
< 231.
Example:
Input: x = 1, y = 4Output: 2Explanation:1 (0 0 0 1)4 (0 1 0 0) ? ?The above arrows point to positions where the corresponding bits are different.
class Solution {public: int hammingDistance(int x, int y) { int res=0; while(x||y) { int temp1=x&1; int temp2=y&1; if(temp1!=temp2) res++; x>>=1; y>>=1; } return res; }};
476. Number Complement
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
- The given integer is guaranteed to fit within the range of a 32-bit signed integer.
- You could assume no leading zero bit in the integer’s binary representation.
Example 1:
Input: 5Output: 2Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.Example 2:
Input: 1Output: 0Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output求一个数的补class Solution {public: int findComplement(int num) { int res=0; int i=0; while(num) { int temp=num&1; temp=temp?0:1; res+=temp<<i; i++; num>>=1; } return res; }};其他好的方法:class Solution {public: int findComplement(int num) { unsigned mask = ~0; while (num & mask) mask <<= 1; return ~mask & ~num; }};371. Sum of Two Integers
Calculate the sum of two integers a and b, but you are not allowed to use the operator
+
and-
.Example:
Given a = 1 and b = 2, return 3.不使用加减号做加法
class Solution {public: int getSum(int a, int b) { //两个数相加,一0一1的位置成为1,都是1的位置需要进位 return b==0?a:getSum(a^b,(a&b)<<1); }};405. Convert a Number to Hexadecimal
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.
Note:
- All letters in hexadecimal (
a-f
) must be in lowercase.- The hexadecimal string must not contain extra leading
0
s. If the number is zero, it is represented by a single zero character'0'
; otherwise, the first character in the hexadecimal string will not be the zero character.- The given number is guaranteed to fit within the range of a 32-bit signed integer.
- You must not use any method provided by the library which converts/formats the number to hex directly.
Example 1:
Input:26Output:"1a"Example 2:
Input:-1Output:"ffffffff"
- bitmapping
- 观察者模式
- map转entity
- FTPClient上传文件大小为0
- 设计模式——访问者模式及在jdk中的应用
- ubuntu二级域名转发和同时附上php java同时存在环境
- bitmapping
- eclipse下安装反编译软件jd-eclipse-site
- 文字垂直居中
- Java+opencv3.2.0之直方图均衡
- mongodb replset副本集部署 优先级设置priority
- Asp.Net Core 1.0 升级 2.0
- profiler 报attach to a running instance of this jvm is not supported错误
- iptables规则的查看、添加、插入、删除和修改
- 阿里测评题2017