zoukankan      html  css  js  c++  java
  • 136. 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?

    分析

    数组中所有数都出现2次,除了某个数只出现1次,求出这个数

    解答

    解法1:(我)HashMap,使用了额外的内存(15ms ×)

    key为元素值,value为1,重复的元素删掉,最后只剩下一个元素

    public class Solution {
        public int singleNumber(int[] nums) {
            HashMap hashMap = new HashMap<Integer, Integer>(((int)(nums.length / 0.75) < 16) ? 16 : (int)(nums.length / 0.75));
            int result = 0;
            for (int num : nums){
                if(hashMap.containsKey(num)){
                    hashMap.remove(num);
                }
                else{
                    hashMap.put(num,1);
                }
            }
            Set set = hashMap.keySet();
            Iterator iterator = set.iterator();
            while(iterator.hasNext()){
                result = (Integer)iterator.next();
            }
            return result;
            
        }
    }
    


    解法2:二进制异或运算(1ms√)

    >1. 0 ^ N = N >2. N ^ N = 0

    所以,如果N是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 result = 0;
            for (int num : nums){
                result ^= num;
            }
            return result;
            
        }
    }
    
  • 相关阅读:
    树状数组基础
    Color the ball HDU1556
    敌兵布阵 HDU1166
    线段树基础
    T9 HDU1298
    7-6 Bandwidth UVA140
    测试方法:
    测试过程:
    爬天极网美女图片缩略图:
    爬天极网美女预览图版一:
  • 原文地址:https://www.cnblogs.com/xuehaoyue/p/6412678.html
Copyright © 2011-2022 走看看