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 ...
随机推荐
- 搭建 github.io 博客站点
前言 很多人都有搭建博客或知识库站点的想法,可自己买云服务器太不划算,部署管理也是个问题:基于免费又热门的 GitHub Pages 来搭建博客站点倒是省钱省力省事的好办法,于是上网一搜,满屏都是关于 ...
- java获取客户端信息
创建JSP页面 clientinfo <%@page import="java.util.StringTokenizer"%> <%@ page language ...
- layer父界面调用子弹窗的方法和获取子弹窗的元素值总结
layer.open({ type: 2 ,title: false //不显示标题栏 ,closeBtn: false ,area: ['460px', '45%'] ,shade: 0.5 ,id ...
- JavaScript的兼容小坑和调试小技巧
JavaScript作为一种弱类型编程语言,入门简单,只要稍微注意一下IE方面的兼容性,就可以很好的使用它. 本文主要是对IE兼容的小坑和调试的小技巧进行举例分析,并给出解决方法. 1.var str ...
- Python-爬虫小计
# -*-coding:utf8-*-import requestsfrom bs4 import BeautifulSoupimport timeimport osimport urllibimpo ...
- PHPExcel 导入Excel数据 (导出下一篇我们继续讲解)
一:使用composer下载 phpoffice/phpexcel 或者直接下载安装包 composer require phpoffice/phpexcel 二 1:导入数据 原理:读取文件,获取文 ...
- ES6 imports用法
import defaultExport from "module-name"; import * as name from "module-name"; // ...
- day2-exercise
# Author: 刘佳赐-Isabelle October 22,2018 """ 1.有变量name = "aleX leNb" 完成如下操作: ...
- FIFO队列 ADT接口 链表实现
FIFO.h (接口) #include "Item.h" void QUEUinit(int); int QUEUempty(void); void QUEUput(Item); ...
- psd 转换 html
http://www.docin.com/search.do?searchcat=2&nkey=psd+to+html