leetcode_Contains Duplicate
描写叙述:
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; } }