【LeetCode】Single Number 解題報告(Java & Python)
[LeetCode]
https://leetcode.com/problems/single-number/ Total Accepted: 183838 Total Submissions: 348610 Difficulty: Easy Question
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? Ways
我實在是太弱了,位元運算的題基本都不會。看了高票答案才明白可以這麼做。
使用異或運算。
異或運算是可以交換順序的運算,也就是說和元素的排列順序無關,自己異或自己等於0,0異或別人等於別人。故,
we use bitwise XOR to solve this problem :
first , we have to know the bitwise XOR in java
1. 0 ^ N = N
2. N ^ N = 0
So….. if N is the single number
N1 ^ N1 ^ N2 ^ N2 ^…………..^ Nx ^ Nx ^ N
= (N1^N1) ^ (N2^N2) ^…………..^ (Nx^Nx) ^ N
= 0 ^ 0 ^ ……….^ 0 ^ N
= N
public class Solution { public int singleNumber(int[] nums) { int returnNum=0; for(int i=0; i<nums.length; i++){ returnNum ^=nums[i]; } return returnNum; }}
AC:1ms
二刷 python
class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ return reduce(lambda x, y: x ^ y, nums)
Date
2017 年 1 月 7 日
2018 年 3 月 14 日 – 霍金去世