zoukankan      html  css  js  c++  java
  • Single Number

    Single Number

    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?

     1 import java.util.Hashtable;
     2 public class Solution {
     3     public int singleNumber(int[] A) {
     4         Hashtable<Integer, Integer> hashtable = new Hashtable<Integer,Integer>();
     5         int result = 0;
     6         
     7         for(int i = 0; i < A.length;i++){
     8             Integer element = hashtable.get(A[i]);
     9             if(null == element){
    10                 hashtable.put(A[i], 1);//第一次放1
    11             }
    12             else if(1 == element){
    13                 hashtable.put(A[i], 2);//第二次放2
    14             }
    15         }//for
    16         for(int i = 0; i < A.length; i++){
    17             if(1 == hashtable.get(A[i])){
    18                 result = A[i];
    19                 break;
    20             }
    21         }//for
    22         return result;
    23     }
    24 }

     ps

    因为题目有要求,用O(1)空间,O(n)时间复杂度,用了hash表后,空间复杂度变为了O(n)

    这里可以用异或来处理

    异或具有交换性,a ^ b = b ^ a

    0 ^ a = a

    将所有的A[i]异或起来,A[0] ^ A[1]....这样根据交换性,最后只剩下单个的个数

    只扫描了一遍,时间复杂度为O(N),只用了一个存储单元空间复杂度为O(1)

    参考:http://www.cnblogs.com/changchengxiao/p/3413294.html

     1 public class Solution {
     2     public int singleNumber(int[] A) {
     3         int result = 0;
     4         for(int i = 0; i < A.length; i++){
     5             result ^= A[i];
     6         }
     7         
     8         return result;
     9     }
    10 }
  • 相关阅读:
    Linux网络编程入门 (转载)
    linux库文件编写入门(笔记)
    动态库封装参考模板
    c++中的 extern "C"(转载)
    Python网络爬虫学习总结
    Google发布机器学习术语表 (包括简体中文)
    NoSQL 简介
    TCP和UDP的区别?
    UDP和TCP的主要特点
    2017中国互联网企业百强
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4104371.html
Copyright © 2011-2022 走看看