• LeetCode 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?


     题目标签:Hash Table

      题目给了我们一个 nums array, array 里只有一个数字是只出现一次的,剩余的都是出现2次的。让我们找出这个只出现一次的数字。

      方法一:

        首先想到的是Hash Set,遍历nums,遇到的数字没有在set 里的,就存入;遇到的数字已经在set 里了,就去除。剩下的数字就是那个只出现一次的数字。

      

      方法二:

        既然题目中还说了不需要用额外的空间,这里可以用XOR,它的特性就是 num ^ num = 0,把所有的数字都 XOR, 它会把相同的两个数字化为0,剩下的就是落单的那个数字。 

    Java Solution 1:

    Runtime beats 14.51% 

    完成日期:05/16/2017

    关键词:HashSet

    关键点:利用HashSet来保存,去除数字,剩下的是落单的数

     1 class Solution 
     2 {
     3     public int singleNumber(int[] nums) 
     4     {
     5         HashSet<Integer> set = new HashSet<>();
     6         
     7         for(int num: nums)
     8         {
     9             if(set.contains(num))
    10                 set.remove(num);
    11             else
    12                 set.add(num);
    13         }
    14         
    15         return set.iterator().next();
    16 
    17     }
    18 }

    参考资料:N/A

    Java Solution 2:

    Runtime beats 41.35% 

    完成日期:05/16/2017

    关键词:Bit Manipulation

    关键点:XOR

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

    参考资料:N/A

    LeetCode 题目列表 - LeetCode Questions List

  • 相关阅读:
    计算机原理及硬件介绍
    python学习之由
    IDEA如何设置JVM参数
    Java函数式编程
    ubuntu更换源
    ubuntu 安装时没有设置root密码,如何登陆root
    ubuntu16.04镜像下载地址
    Elasticsearch Search APIs
    Elasticsearch Document APIs
    Elasticsearch搜索
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7727792.html
Copyright © 2020-2023  润新知