首页 > 技术文章 > leetcode_Contains Duplicate

ljbguanli 2017-04-23 09:21 原文

描写叙述:

Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.

思路:

给定一堆数。让推断是否有反复的数字,无外乎将之前记录的标记下来,可是标记历史记录肯定要用到O(n)大小的存储空间。而用多余的存储空间又是面试时非常忌讳的。所以我想到了。用两个HashSet来标记是否出现了反复数字,2个?没错,尽管是2个。可是HashSet是用1bit来表示标记一个数。整体来讲还是比开辟一个int[]更节省内存空间的。

代码:

public class Solution {
    public boolean containsDuplicate(int[] nums) {
        if(nums==null||nums.length==0)
            return false;
        BitSet  set1=new BitSet();
        BitSet  set2=new BitSet();
        int len=nums.length;
        int num=0;
        for(int i=0;i<len;i++)
        {
            if(nums[i]>=0)
            {
                if(!set1.get(nums[i]))
                    set1.set(nums[i]);
                 else
                    return true;
            }else
            {
                num=-nums[i];
                 if(!set2.get(num))
                    set2.set(num);
                 else
                    return true;
            }
            
        }
        return false;
    }
}


推荐阅读