[LeetCode] Single Number II 位运算
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?
[解题思路]
k为奇数时,如果k 大于10,就不用转换为2进制了,全部的数的同一位叠加(个位上的数叠加,十位上的叠加,百位上的....),mod k 之后结果放回对应位,便是目标int。
如果k <10,将数组中的数转换成2进制,全部数的同一位叠加,后mod k,得到的结果按位的位置还原成目标int。
#include <iostream>
using namespace std; class Solution {
public:
int singleNumber(int A[], int n) {
int cnt[]={};
int ret =;
for(int i=;i<n;i++){
int curnum = A[i];
while(curnum){
int idx= __builtin_ffs (curnum);
// cout<<idx<<endl;
cnt[idx]++;
curnum &=curnum-;
}
}
// for(int i=1;i<=32;i++)
// cout<<cnt[i]<<" ";
// cout<<endl;
int a=;
for(int i=;i<=;i++){
ret +=a*(cnt[i]%);
a=a<<;
}
return ret;
}
}; int main()
{
int a[]={,,,};
Solution sol;
cout<<sol.singleNumber(a,sizeof(a)/sizeof(int))<<endl;
return ;
}
discuss 中有一种使用内存更少的,
https://oj.leetcode.com/discuss/6632/challenge-me-thx
public int singleNumber(int[] A) {
int ones = , twos = ;
for(int i = ; i < A.length; i++){
ones = (ones ^ A[i]) & ~twos;
twos = (twos ^ A[i]) & ~ones;
}
return ones;
}
直观上难理解,只是思路是一样的,转换为二进制,然后每个位上面的数统计,然后mod(3),考虑1位,那么他的变化是
0 -> 1 ->2 -> 0
二进制就是:
00 -> 01 -> 10 -> 00
好了,这样只要两位就可以表示了,代码中的ones twos ,就这这个意思。
[LeetCode] Single Number II 位运算的更多相关文章
- leetcode Single Number II - 位运算处理数组中的数
题目描述: 给定一个包含n个整数的数组,除了一个数出现一次外所有的整数均出现三次,找出这个只出现一次的整数. 题目来源: http://oj.leetcode.com/problems/single- ...
- LeetCode——Single Number II(找出数组中只出现一次的数2)
问题: Given an array of integers, every element appears three times except for one. Find that single o ...
- [LeetCode] Single Number II 单独的数字之二
Given an array of integers, every element appears three times except for one. Find that single one. ...
- LeetCode:Single Number II
题目地址:here 题目大意:一个整数数组中,只有一个数出现一次,其余数都出现3次,在O(n)时间,O(1)空间内找到这个出现一次的数 对于”只有一个数出现一次,其余数出现2次“的情况,很简单,只要把 ...
- [leetcode]Single Number II @ Python
原题地址:http://oj.leetcode.com/problems/single-number-ii/ 题意:Given an array of integers, every element ...
- Leetcode Single Number II (面试题推荐)
还记得<剑指offer>和<编程之美>等书上多次出现的找一个数组中仅仅出现一次的数那个题吗? leetcode也有这道题 链接here 相信大家都知道用异或在O(n)的时间复 ...
- LeetCode | Single Number II【转】
题目:Given an array of integers, every element appears three times except for one. Find that single on ...
- [Leetcode] single number ii 找单个数
Given an array of integers, every element appears three times except for one. Find that single one. ...
- LeetCode Single Number II 单元素2
题意:给一个序列,其中只有1个元素只出现1次,其他的都一定出现3次.问这个出现一次的元素是多少? 思路: (1)全部元素拆成二进制,那么每个位上的1的个数应该是3的倍数,如果不是3的倍数,则ans的这 ...
随机推荐
- gitlab文件夹的权限不要随便给777
gitlab 权限给到777 不一定有用
- C程序设计语言 -- 运算符优先级
1. 运算符分类 算术运算符 [+, -,*, /, % , ++, --] 关系运算符 [>, >=, <, <=] 相等性运 ...
- 2019年Vue学习路线图
https://juejin.im/entry/5c108864f265da61726555ed 官网: https://cn.vuejs.org/index.html js引入地址 https:// ...
- 基于python3.7的一个闯越自动签到脚本--demo版
望指正demo的定位,有时候会抽风无法接受我的定位信息 #! /usr/bin/python3 # -*- coding:UTF- -*- # time : // : # file : chuangy ...
- SoapUI(一)之webservice测试
webservice测试需要具备的条件: 1.了解业务需求:如从客户端发送一个post请求给服务器,服务器将响应传给客户端. 2.需要一个明确的wsdl地址: 如天气预报的接口链接:http://ww ...
- 模型类序列化器ModelSerializer
定义 比如我们创建一个BookInfoSerializer class BookInfoSerializer(serializers.ModelSerializer): ""&qu ...
- HDU 5119 Happy Matt Friends (14北京区域赛 类背包dp)
Happy Matt Friends Time Limit: 6000/6000 MS (Java/Others) Memory Limit: 510000/510000 K (Java/Oth ...
- xposed的基本使用
一.原理 Android运行的核心是zygote进程,所有app的进程都是通过zygote fork出来的.通过替换system/bin/下面的app_process等文件,相当于替换了zygote进 ...
- Java多线程-yield(),sleep()以及wait()的区别
从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列).并且在某一时刻cpu只为ready queue中位于队列头部的线程服务.但是当前正在被服务的线程可能觉得cpu的服务质量不够 ...
- 了解Windows Server以及Hyper-V许可模式
在2015年11月,微软宣布对Windows Server 2016以及Hyper-V的许可模式进行重大变更,并于2016年第三季度正式生效,Windows Server 2016标准版及数据中心版的 ...