137. Single Number II
来源:互联网 发布:永琪和知画圆房了几次 编辑:程序博客网 时间:2024/05/20 04:48
题目:Single Number II
原题链接:https://leetcode.com/problems/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?
给出一组整数,其中每一个元素出现的次数是3次,除了一个元素,请找出这个元素。
注意:你的算法需要保持在线性时间复杂度,并且尽量不占用额外的空间。
由于其他元素出现的次数都是3次,所以我们需要想方法利用这个3次来消去重复的元素。
用两个整数first, second,初值设为0。
对于任意一个整数 n ,用如下的算式:
first = ( first ^ n ) & ~second;
second = ( second ^ n ) & ~first;
这时 first 的值为 n , second 的值为 0 。
下面我们再循环一次上面的算式,结果 first 的值为 0 ,second 的值为 n。
让我们再循环一次,记过 first 的值为0, second 的值为 0。
这样经过3次循环,n 的值对first 和 second 的结果没有任何影响。
这样方法就出来了,遍历数组中所有元素,然后每次用数组中的元素代替上式中的 n ,这样凡是重复3次的元素的影响最后都被消成了0 , 唯一的那个单独的元素所造成的结果就是只循环一次上式的结果,这样 first 的值就是那个单独的元素。
代码如下:
class Solution {public: int singleNumber(vector<int>& nums) { int first = 0, second = 0; for (auto num : nums) { first = (first ^ num) & ~second; second = (second ^ num) & ~first; } return first; }};
- 137.Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- 137. Single Number II
- idea编辑器快捷键的使用
- 电商对接使用圆通电子面单接口方法
- Strut2之ongl表达式
- 基于注解的 Hibernate 配置
- JVM加载class文件的原理机制
- 137. Single Number II
- linux数据库创建远程连接账号(Navicat等)
- 《数据库系统概论》---第二章 关系数据库
- mongodb创建2D索引
- js事件的命名空间的详解
- 可靠性配置与管理——BFD和NQA配置与管理2
- Android APK的安装过程
- Java https请求
- visual studio code 配置python3环境(Mac下和windows下一样)