package com.gloomy.leetcode;
/**
* 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.
*
* @author 过路的守望
*
*/
public class ContainsDuplicate {
/**
* nums中是否含重复值 利用bitmap 来检测
* 时间复杂度O(N)
* @param nums
* @return
*/
public boolean containsDuplicate(int[] nums) {
int len = nums.length;
if (nums == null || len == 0) {
return false;
}
int max = 0;
/*
* 找出数组中的最大值,以便确定bitmap大小
*/
for(int k:nums){
if(k>max){
max = k;
}
}
int size = max / 32 + 1;
System.out.println(size);
/*
* bitmap空间大小
*/
int[] bitmap = new int[size];
for (int k : nums) {
int index = k / 32;
int padding = k % 32;
/*
* 如果k所在为已经为1直接返回true
*/
if ((bitmap[index] & (1 << padding)) != 0) {
return true;
} else {
bitmap[index] = bitmap[index] ^ (1 << padding);
}
}
return false;
}
}
LeetCode 217. Contains Duplicate
最新推荐文章于 2024-05-01 16:18:57 发布