type
Post
status
Published
date
Apr 6, 2023
slug
summary
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
tags
leetcode
c++
category
算法
icon
password

136.只出现一次的数字

题解

使用位运算,此题可使用异或运算
异或运算有以下三个性质:
  1. 任何数和0做异或运算,结果仍然是原来的数,即a⊕0=a。
  1. 任何数和其自身做异或运算,结果是0,即a⊕a=0。
  1. 异或运算满足交换律和结合律,即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; } };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
206. 反转链表Linux中的五种 I/O 模型