博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 137 Single Number II 解题报告
阅读量:2173 次
发布时间:2019-05-01

本文共 1238 字,大约阅读时间需要 4 分钟。

Single Number II

Total Accepted: 44725 Total Submissions: 128964

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?

这个题目是,给定一个序列,所有的数字都出现三次,只有一个出现一次,找出这个数字。 如果是出现两次的话,我们可以使用异或,异或两次就是0了,然后剩余的就是那个单独的数字。

如果是出现三次的话,我们可以这样实现:我们用一个32容量的数组储存当前位置,bit1出现的次数。最后的时候我们把每个次数模3,这样出现3次的就被模为0了。
例如:
3组数字
1 0 0
0 1 0
1 0 0
1 0 0
把所有1加起来,运算的结果是
3 1 0
我们把各位模3结果就是0 1 0即是,单独的数字。
最后把这个数字转换成数字即可,但是需要注意,如果最高位是1的话,也就是负数,需要取反再加一。

class Solution {public:    int singleNumber(int A[], int n) {        vector
bitMod3(32, 0); int result = 0; for(int i = 0; i < n; ++i) { for(int j = 0; j < 32; ++j) { if(A[i] >> j & 1 == 1) bitMod3[j]++; } } for_each(bitMod3.begin(), bitMod3.end(), [](int &x) { x %= 3; }); for(int i = 0; i < 32; ++i) { if(bitMod3[i] ^ bitMod3[31]) //如果是负数各位取反 result += pow(2, i); } if(bitMod3[31]) { ++result; result = -result; } return result; }};

转载地址:http://djezb.baihongyu.com/

你可能感兴趣的文章
走进JavaWeb技术世界4:Servlet 工作原理详解
查看>>
走进JavaWeb技术世界5:初探Tomcat的HTTP请求过程
查看>>
走进JavaWeb技术世界6:Tomcat5总体架构剖析
查看>>
走进JavaWeb技术世界7:Tomcat和其他WEB容器的区别
查看>>
走进JavaWeb技术世界9:Java日志系统的诞生与发展
查看>>
走进JavaWeb技术世界10:从JavaBean讲到Spring
查看>>
走进JavaWeb技术世界11:单元测试框架Junit
查看>>
走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
查看>>
走进JavaWeb技术世界13:Hibernate入门经典与注解式开发
查看>>
走进JavaWeb技术世界14:Mybatis入门
查看>>
走进JavaWeb技术世界16:极简配置的SpringBoot
查看>>
初探Java设计模式1:创建型模式(工厂,单例等)
查看>>
初探Java设计模式2:结构型模式(代理模式,适配器模式等)
查看>>
初探Java设计模式3:行为型模式(策略,观察者等)
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>