数据结构和算法LeetCode,初级算法-4存在重复元素
Posted 数据结构和算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构和算法LeetCode,初级算法-4存在重复元素相关的知识,希望对你有一定的参考价值。
截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666
视频分析
LeetCode,初级算法-存在重复元素
代码部分
1,暴力破解
public boolean containsDuplicate(int[] nums)
for (int i = 0; i < nums.length; i++)
for (int j = i + 1; j < nums.length; j++)
if (nums[i] == nums[j])
return true;
return false;
2,排序
public boolean containsDuplicate(int[] nums)
Arrays.sort(nums);
for (int ind = 1; ind < nums.length; ind++)
if (nums[ind] == nums[ind - 1])
return true;
return false;
3,使用HashSet
public boolean containsDuplicate(int[] nums)
Set<Integer> set = new HashSet<>();
for (int num : nums)
//因为集合set中不能有重复的元素,如果有重复的
//元素添加,就会添加失败
if (!set.add(num))
return true;
return false;
4,位运算
public boolean containsDuplicate(int[] nums)
//找出数组中的最大值和最小值
int min = nums[0];
int max = min;
for (int num : nums)
min = Math.min(min, num);
max = Math.max(max, num);
//计算数组中最大值和最小值的差值,目的是要确定位图的长度
int distant = max - min + 1;
long[] bitmap = new long[(distant - 1) / 64 + 1];
for (int num : nums)
//根据当前数字到最小数字的长度,定位到当前数字在位图
//中的位置。判断这个位置是不是1,如果是1,说明存在
//重复的数字
int tmp = num - min;
if ((bitmap[tmp / 64] & (1L << (tmp % 64))) != 0)
return true;
//如果不存在重复的数字,就把当前这个位置变为1
bitmap[tmp / 64] |= 1L << (tmp % 64);
return false;
以上是关于数据结构和算法LeetCode,初级算法-4存在重复元素的主要内容,如果未能解决你的问题,请参考以下文章