zoukankan      html  css  js  c++  java
  • leetcode------Single Number

    标题: Single Number
    通过率: 46.0% 
    难度:    中等 

    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?

    第一次刷题目拿到题目后有些懵。线性时间复杂度O(n),那么不能用循环遍历了,实在是不会。

     想到的方法就是存入map,然后进行比较,最后输出value为1的map的key。

    然后去网上查资料。发现这个题目原来是考察“位”操作的,解释如下:

    如果一个序列是A={1,2,3,4,3,1,3,2}也许还不明白为什么用位操作那么我整理成如下方式

    序列变成B={1,1,2,2,3,3,4}后是不是有点思路?其实我当时也没有。然后看大神说就是“异或“

    针对容易的序列B进行分析,在位运算中:

    1、0^【自身】=【自身】

    2、a^b=b^a

    那么a^b^c^a=a^a^b^c这就是为什么我把序列A整理成序列B,有了条件1,条件2,我们发现B中的1^1=0,2^2=0……以此类推最后只有0^4输出后刚好是4,同理即使乱序序列我们不管他们是否一样或者不同,都仅仅是个中间件而已相同的早晚会被抵消,最后只剩下单独的那个。

    最后Java代码如下:

    1 public class Solution {
    2     public int singleNumber(int[] A) {
    3         int xor=0;
    4         for(int i=0;i<A.length;i++){
    5             xor=xor^A[i];
    6         }
    7         return xor;
    8     }
    9 }

    第一次成功,以上代码应该是效率最高的。我认为

  • 相关阅读:
    【Codechef】Chef and Bike(二维多项式插值)
    USACO 完结的一些感想
    USACO 6.5 Checker Challenge
    USACO 6.5 The Clocks
    USACO 6.5 Betsy's Tour (插头dp)
    USACO 6.5 Closed Fences
    USACO 6.4 Electric Fences
    USACO 6.5 All Latin Squares
    USACO 6.4 The Primes
    USACO 6.4 Wisconsin Squares
  • 原文地址:https://www.cnblogs.com/pkuYang/p/4155829.html
Copyright © 2011-2022 走看看