Single Number II leetcode java
问题描述:
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
提示:bit manipulation(位操作)
参考:http://www.acmerblog.com/leetcode-single-number-ii-5394.html?utm_source=tuicool&utm_medium=referral
分析:由于所有数字都是出现奇数次,所以,并不是简单的异或运算。
考虑所有数字用二进制表示,如果把第i个位置上所有数字的和对3取余,那么只会有两种结果,0或1。因此,取余的结果就是那个single number。
java 代码:
一、一个直接的实现就是用大小为 32的数组来记录所有位上的和。
public int singleNumber(int[] nums){
//所有数字都使用32位二进制表示,初始为0
int[] count = new int[32];
int result = 0; //singlenumber
for(int i = 0; i < 32; i++){
for(int j = 0; j < nums.length; j++){
int key = (nums[j] >> i) & 1;
if (key == 1) { //右移,获得第i个bit,统计1的个数
count[i] ++ ;
}
}
//第i位左移,然后将所有位相或,最终得到singlenumber
result |= ((count[i] % 3) << i);
}
return result;
}
二、使用掩码,改进算法一
ones代表第ith 位只出现一次的掩码变量twos代表第ith 位只出现两次的掩码变量threes代表第ith 位只出现三次的掩码变量
public int singleNumber(int[] nums){
int ones = 0, twos = 0, threes = 0;
for(int i = 0; i < nums.length; i++){
twos = twos | ( ones & nums[i]);
ones = ones ^ nums[i]; //异或3次 和 异或 1次的结果是一样的
threes = ones & twos;
//对于ones 和 twos, 把出现了3次的位置设置为0 (取反之后1的位置为0)
ones = ones & ~threes;
twos = twos & ~threes;
}
return ones;
}
Single Number II leetcode java的更多相关文章
- Single Number III leetcode java
问题描述: Given an array of numbers nums, in which exactly two elements appear only once and all the oth ...
- Ugly Number II leetcode java
问题描述: Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime fa ...
- Single Number II - LeetCode
Given an array of integers, every element appears three times except for one. Find that single one. ...
- Leetcode 137 Single Number II 仅出现一次的数字
原题地址https://leetcode.com/problems/single-number-ii/ 题目描述Given an array of integers, every element ap ...
- LeetCode 137. Single Number II(只出现一次的数字 II)
LeetCode 137. Single Number II(只出现一次的数字 II)
- LeetCode(137) Single Number II
题目 Given an array of integers, every element appears three times except for one. Find that single on ...
- 【LeetCode】137. Single Number II 解题报告(Python)
[LeetCode]137. Single Number II 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/single- ...
- 【leetcode】Single Number && Single Number II(ORZ 位运算)
题目描述: Single Number Given an array of integers, every element appears twice except for one. Find tha ...
- 【题解】【位操作】【Leetcode】Single Number II
Given an array of integers, every element appears three times except for one. Find that single one. ...
随机推荐
- 最小二乘法拟合非线性函数及其Matlab/Excel 实现
1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*r ...
- HDU 4366 Successor(dfs序 + 分块)题解
题意:每个人都有一个上司,每个人都有能力值和忠诚值,0是老板,现在给出m个询问,每次询问给出一个x,要求你找到x的所有直系和非直系下属中能力比他高的最忠诚的人是谁 思路:因为树上查询很麻烦,所以我们直 ...
- js插入排序
插入排序 平均时间复杂度O(n*n) 最差情况O(n*n) 最好情况O(n) 空间复杂度O(1) 稳定性:稳定 function insertSort (arr) { var len = arr.le ...
- (一)PHP简介
什么是 PHP? PHP 是 "PHP Hypertext Preprocessor" 的首字母缩略词 PHP 是一种被广泛使用的开源脚本语言 PHP 脚本在服务器上执行 PHP ...
- CZK 的饮料店
[题目描述] 一天,小学生 cyx 向你请教了一道他不会做的小学数学题,你瞄了一眼题目,发现题目长下面这样. czk 老板开了个饮料连锁店,连锁店共有 n 家,出售的饮料种类相同. 为了促销,czk ...
- 关于spring boot启动监控端点的方法(spring-boot-starter-actuator)
前言: 在spring boot的旧版本中,监控端点(如/env)是默认开启的,所以只要项目正常启动,就能通过url获取信息.可是在2.0版本以后,由于安全性考虑,除了/health和/info的端点 ...
- from import
from A import B # 只导入A里面的B
- 算法笔记--斜率优化dp
斜率优化是单调队列优化的推广 用单调队列维护递增的斜率 参考:https://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 以例1举 ...
- postMan用法
增加: 删除: 更改: 查询:
- 学了vue和webpack的笔记
首先把package.json贴出来,这里很多插件存在版本区别,因此要特别注意版本,不是所有的安装最新的都行 { "name": "life_manager", ...