• 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

  • 相关阅读:
    提取字符串中的数字
    监控mysql执行的sql语句
    maven打包跳过单元测试
    idea常用快捷键
    spring boot 从入门到精通(一)启动项目的三种方式
    git从入门到精通(三)(git 生成本地密钥的方法:windows)
    经典面试题
    vue 20道精选面试题
    Angular输入框内按下回车会触发其它button的点击事件的解决方法
    快速搭建angular7 前端开发环境
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7727792.html
Copyright © 2020-2023  润新知