从包含重复数字的数组中找出单个不重复项

Single Number

Given a non-empty 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?

Example 1:

Input: [2,2,1]
Output: 1

Example 2:

Input: [4,1,2,1,2]
Output: 4

Programmer

class Solution {
    public int singleNumber(int[] nums) {
        
        Set<Integer> s = new HashSet<Integer>();
        
        for (int i : nums) {
            if(!s.add(i)){
                s.remove(i);
            }
        }
        
        return s.iterator().next();
    }
}

Idea

  • 利用 Set 中元素的不重复性
  • 往 Set 中添加元素,若此时不能继续添加就证明,将要添加的元素有重复项,是不可以添加的,所以在 Set 中删除次元素
  • 最后,剩下的便是唯一的那个不重复的元素
最近的文章

记一次解决博客 80 端口被占用

记一次解决博客80端口被占用因为重装了一次系统,导致重新生成sshkey,然后更换服务器的公钥,这时…

继续阅读
更早的文章

How To Secure Your Linux Server In 7 Easy Steps

HowToSecureYourLinuxServerIn7EasySteps如何通过7个简单的步骤加…

继续阅读