【leetcode】Single Number 1 & 2
来源:互联网 发布:sybase数据库如何备份 编辑:程序博客网 时间:2024/06/08 14:14
简介
这两个题都要求从整数数组中找出唯一的元素。我们第一反应可以采用排序加遍历的方式来处理。
但是题目要求线性的时间复杂度和尽可能小的空间复杂度。排序遍历的方式就不可行了。
如果了解计算机是如何表示一个整数的,那么这两道题就不难了。
题一
这一题里,所有元素都是成对出现,除了那个需要寻找的元素之外。举个例子,数组中有三个元素{1, 2, 2}。这三个数在计算机中的表示为:
1 表示为 00000000 00000000 00000000 00000001
2 表示为 00000000 00000000 00000000 00000010
每个位上1的总数目是2*m个或者2*m+1个,将这些数异或,两个1异或,结果为0。所以,最终结果唯一,且就是我们要找的数。
这道题可以衍生为,一个整数数组中有n个元素,其中只有一个出现一次,其他恰好出现n(n为偶数)次,求出现一次的那个元素。
代码如下:
<span style="font-family:Courier New;">class solution {public: int singleNumber(int A[], int n) {int x = A[0];for (size_t i = 1; i < n; ++i)x ^= A[i];return x;}};</span>
题二
这一题里,所有元素都出现三次,除了要找的那个元素。出现,三次,异或就没有意义了。但是原理与上一题类似。
举个例子:数组中有四个元素{1, 2, 2, 2}。这三个数在计算机中的表示为:
1 表示为 00000000 00000000 00000000 00000001
2 表示为 00000000 00000000 00000000 00000010
每个位上1的总数目是3*m个或者3*m+1个,多余的这个1就是我们需要的。我们只需要依次找出第i(0<i<sizeof(int)*8)位上,是否多余了1,那么最终就能获得答案。
这种解法可以解决所有每个元素出现n(n任意)次,其中一个元素除外的问题。
代码如下:
<span style="font-family:Courier New;">class Solution {public:int singleNumber3(int A[], int n) {const int w = sizeof(int)*8;int res = 0;for (int i = 0; i < w; ++i) {int bit = 0;for (int j = 0; j < n; ++j) {if ((A[j] >> i) & 1)bit++;}res += ((bit % 3) << i);}return res;}};</span>
- 【leetcode】Single Number 1 & 2
- 【leetcode】Single Number 2
- LeetCode (Single number 2)
- LeetCode:Single Number(2)
- leetcode Single Number & Single Number ||
- leetcode 136|137|260. Single Number 1|2|3
- leetcode刷题17:single number 2
- leetCode OJ(1) Single Number
- leetcode编程题-Single Number 1
- [LeetCode] Single Number
- Leetcode: Single Number
- Leetcode Single Number
- Single Number - leetcode
- Single Number II - leetcode
- Leetcode: Single Number II
- 【LeetCode】Single Number
- [LeetCode] Single Number II
- LeetCode: Single Number II
- 动物怎么叫
- 嵌入式Linux之我行——ARM MMU工作原理剖析
- 淮北“松绑”公积金贷款 连续缴存满6 个月即可申请
- android shape的使用(3)
- acm第一套 (1)
- 【leetcode】Single Number 1 & 2
- ajax
- 单元测试基本路径覆盖法
- Memcached 的使用方法
- MTD设备系统介绍 【外文翻译】
- Effective C++:条款13:以对象管理资源
- java annotation 学习笔记
- Memcached完全剖析–1. memcached的基础
- 7K月薪面试题____银行业务调度系统