LeetCode——Single Number(II)
来源:互联网 发布:php 已换行拆分 编辑:程序博客网 时间:2024/06/13 17:00
Single Number
Given an array of integers, every element appears twice except for one. Find that single one.
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?
思路:
这种类型的题目有两种思路:1、Map映射。2、位运算。
1、Map映射
可以使用使用map统计所有数值出现的次数,然后最后返回满足条件的值。
代码:
Single Number:
class Solution {public: int singleNumber(int A[], int n) { unordered_map<int, bool> ump_ii; for (int i = 0; i < n; i++) { if (!ump_ii.count(A[i])) ump_ii[A[i]] = true; else ump_ii.erase(A[i]); } return ump_ii.begin()->first; } };
Single Number II:
class Solution {public:int singleNumber(int A[], int n) {unordered_map<int, int> m;for (int i = 0; i < n; i++) {if (m.count(A[i]) == 0) {m[A[i]] = 1;} else if (m[A[i]] == 1) {m[A[i]] = 2;} else if (m[A[i]] == 2) {m.erase(A[i]);}}return m.begin()->first;}};2、位运算
Single Number:两个相同数的异或(^)值为0,Single Number中可以将所有的数求异或运算,那么值为所要求的Single Number。
所以代码为:
class Solution {public: int singleNumber(int A[], int n) { int num=A[0]; for(int i=1;i<n;i++){ num^=A[i]; } return num; }};Single Number II:对于除了出现一次之外的所有的整数,其二进制表示中每一位1出现的次数是3的整数倍,将所有这些1清零,剩下的就是最终的数。用ones记录到当前计算的变量为止,二进制1出现“1次”的数位。用twos记录到当前计算的变量为止,二进制1出现“2次”的数位。当ones和twos中的某一位同时为1时表示二进制1出现3次,此时需要清零。即用二进制模拟三进制计算。最终ones记录的是最终结果
代码:
class Solution {public:int singleNumber(int A[], int n) { int ones=0,twos=0,threes=0; for(int i=0;i<n;i++){ twos|=(ones&A[i]); ones=ones^A[i]; threes=(ones&twos); twos&=~threes; ones&=~threes; } return ones; } };当然进行位运算的时候我们可以将整数(int 32)一位一位运算。
代码:
class Solution {public:int singleNumber(int A[], int n) { int ans = 0; for (int i = 0; i < 32; i++) { int c = 0, d = 1<<i; for (int j = 0; j < n; j++) if (A[j] & d) c++; if (c%3) ans |= d; } return ans; } };
0 0
- LeetCode——Single Number(II)
- LeetCode——136. Single Number&&137. Single Number II
- LeetCode OJ——Single Number II
- LeetCode——Single Number II
- leetcode 137 —— Single Number II
- LeetCode——Single Number II
- LeetCode — Single Number II 解题报告
- LeetCode—137 Single Number II
- Single Number II - leetcode
- Leetcode: Single Number II
- [LeetCode] Single Number II
- LeetCode: Single Number II
- leetcode -- Single Number II
- [leetcode]Single Number II
- [LeetCode] Single Number II
- 【leetcode】Single Number II
- LeetCode:Single Number II
- Leetcode: Single Number II
- C++ 自定义调试信息的输出
- 如何打印函数指针的函数名-总结
- openssl signature 2
- Java SimpleDateFormat 线程不安全问题及解决方法
- 母婴网站Zulily盈余隐秘竟然是推延发货?
- LeetCode——Single Number(II)
- boost库的编译
- Cloudera Manager CDH4的安装
- Sdut 2108 Alice and Bob(数学题)(山东省ACM第四届省赛D题)
- 在 ArcMap 中显示影像和栅格数据快速浏览
- Python 编程规范
- spring AspectJ的Execution
- 大家好
- lucene