type
Post
status
Published
date
Apr 6, 2023
slug
summary
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
tags
leetcode
c++
category
算法
icon
password
136.只出现一次的数字
题解
使用位运算,此题可使用异或运算
异或运算有以下三个性质:
- 任何数和0做异或运算,结果仍然是原来的数,即a⊕0=a。
- 任何数和其自身做异或运算,结果是0,即a⊕a=0。
- 异或运算满足交换律和结合律,即a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
因为除了某个元素只出现一次,其他元素都出现两次,所以经过异或运算,刚好能消除该元素。
代码
class Solution { public: int singleNumber(vector<int>& nums) { int ret=0; for(auto num:nums){ ret ^= num; } return ret; } };
- 作者:GreekLee
- 链接:https://www.rusellwest.top/article/4274db37-29e9-48a9-a991-27cd74fd6ed1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。