LeetCode - 136. Single Number - ( C++ ) - 解题报告 - 位运算思路 xor
1.题目大意
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
给定一个数组的整数,数组中的每个元素都出现了两次。例外地,有一个元素只出现了一次。找出那个只出现了一次的元素。
要求:算法的时间复杂度应是线性的,不需要额外的存储空间。
2.思路
纵观全题,我的第一想法是先排序,然后开始一加一减,最后取绝对值。当然,第一想法都比较幼稚。互相握手的想法就更加不现实了。
第二想法是,先排序,然后相邻元素对比,例如这样的思路:
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i+=2)
if(nums[i]!=nums[i+1])
return nums[i];
return 0;
}
};
当然,这个思路是可以AC的,但是要考虑到sort()的时间复杂性在C++里面是$O(nlogn)$。虽然在之后的筛查中复杂度是$O(n)$,但在sort()这一步,显然不算线性了。LeetCode似乎很多时候判的比较松。
这题刚好我是跟另一题一起看的,看完题我就出去吃饭了,另一题刚好用到位运算,…… 呃好像要扯远了,反正另一种方法就是位运算中的xor。稍微解释一下的话,就是相同位不同则为1,相同位相同则为0。符号是 ^
比如 11101 ^ 10110 = 01011
在11101和10110中:
第一位都是1,相同位相同,因此结果的第一位为0;
第二位分别是1和0,相同位不同,因此结果的第二位为1。
以此类推。
用这种方法实现的代码是:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int result=0;
for (int i=0;i<nums.size();i++)
result= result ^ nums[i];
return result;
}
};
3.应当注意的地方
这题主要要注意的地方还是出现在第一种实现方法里的。
首先是vector的特性,要用sort()的时候的用法跟一般数组使用的时候不大一样(具体参见代码)。
第二点是如果漏了最后一行
return 0;
就会提示warning: control reaches end of non-void function,详细原因大部分老师应该都提过,就不赘述了。
LeetCode - 136. Single Number - ( C++ ) - 解题报告 - 位运算思路 xor的更多相关文章
- 【LeetCode】137. Single Number II 解题报告(Python)
[LeetCode]137. Single Number II 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/single- ...
- LeetCode 136. Single Number C++ 结题报告
136. Single Number -- Easy 解答 相同的数,XOR 等于 0,所以,将所有的数字 XOR 就可以得到只出现一次的数 class Solution { public: int ...
- leetcode 136 Single Number, 260 Single Number III
leetcode 136. Single Number Given an array of integers, every element appears twice except for one. ...
- LeetCode 136. Single Number(只出现一次的数字)
LeetCode 136. Single Number(只出现一次的数字)
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
- LeetCode 136 Single Number(仅仅出现一次的数字)
翻译 给定一个整型数组,除了某个元素外其余元素均出现两次. 找出这个仅仅出现一次的元素. 备注: 你的算法应该是一个线性时间复杂度. 你能够不用额外空间来实现它吗? 原文 Given an array ...
- [LeetCode] 136. Single Number 单独数
Given a non-empty array of integers, every element appears twice except for one. Find that single on ...
- Leetcode 136 Single Number 仅出现一次的数字
原题地址https://leetcode.com/problems/single-number/ 题目描述Given an array of integers, every element appea ...
- 【leetcode】Single Number && Single Number II(ORZ 位运算)
题目描述: Single Number Given an array of integers, every element appears twice except for one. Find tha ...
随机推荐
- direct path write 等待事件导致数据库hang
同事反应十几分钟前数据库好像挂起了一会,让我排查数据库是否存在什么问题. 第一反应看当前数据库还是否有什么等待事件,结果有direct path write等待事件. 于是抓了问题时间段20分钟的AS ...
- Oracle 触发器(二)
Oracle触发器详解 触发器是许多关系数据库系统都提供的一项技术.在oracle系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 8.1 触发器类型 触发器在数据库里 ...
- Wget 使用详解
Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的 ...
- 从tomcat下载文件的配置方法(很全呢)
前几天我做的项目有个下载文件的东西让我苦恼了一下,上传的文件没有放到OSS服务器,而是直接放到tomcat内, 我就想做一个a标签直接下载的得了,结果点开一直都说没有该文件,我查了很多资料找到了如何配 ...
- Kafka 推荐网站
Kafka系列文章 [Kafka设计解析(一)- Kafka背景及架构介绍](http://www.jasongj.com/2015/03/10/KafkaColumn1/) [Kafka设计解析(二 ...
- 史上更全的 MySQL 高性能优化实战总结!
1 前言 2 优化的哲学 3 优化思路 3.1 优化什么 3.2 优化的范围有哪些 3.3 优化维度 4 优化工具有啥? 4.1 数据库层面 4.2 数据库层面问题解决思路 4.3 系统层面 4.4 ...
- thinkphp中的大字母的意思
ThinkPHP 单字母函数 A() 内部实例化控制器 D() 实例化自定义模型类 M() 实例化一个基础模型类 R() 调用某个控制器的操作方法 L() 启用多语言的情况下,设置和获取当前的语言定义 ...
- layui sleect获取value值
<div class="layui-form-item"> <label for="username" class="layui-f ...
- 『Python基础-7』for循环 & while循环
『Python基础-7』for循环 & while循环 目录: 循环语句 for循环 while循环 循环的控制语句: break,continue,pass for...else 和 whi ...
- Go Web Gin EasyUI 框架
项目结构 第三方: 1.gin微服务框架 2.EasyUI框架