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

  • 相关阅读:
    .net下将富文本编辑器文本原样读入word文档
    最大流算法完整代码
    如何用程序删除win 7下SYSTEM权限的目录
    01背包问题的动态规划算法
    使用gem安装jekyll错误记录
    dev机上数据库中批量生成table
    git pull错误记录及解决
    git clone操作到开发机的错误记录
    nginx错误记录
    链表链式结构的写法
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7727792.html
Copyright © 2011-2022 走看看