您的位置:首页 > 大数据 > 人工智能

Leetcode解题笔记-Contains Duplicate && Contains Duplicate II&&Contain Duplicate III

2015-08-09 04:05 447 查看
Contain Duplicate 题目要求:

给定一个数组如果有重复就返回true,如果没有就返回false

个人分析:

这个题比剔除重复的要简单许多,只需要判断就好

代码如下:

public static boolean containsDuplicate(int[] nums){
if (nums.length==0) return false;
Arrays.sort(nums);
for(int i =1; i < nums.length; i++){
if(nums[i-1]==nums[i])
return true;
}
return false;
}

Contain Duplicate II 题目要求:

题目要求:在一个给定的数组中找出是否存在重复的数组,且两个重复的元素之间的距离不能大于K

个人解法:

1. 写两个循环,找出nums[i]==nums[k]并且abs(i-k)小于k返回true

2.这样有很多coner case 会考虑不到,比如当数组中总元素数量等于k的时候

参考解法:

1.利用hashset进行解题,定义一个hashset来当做存储临时的数组元素

2. if(i>k) set.remove(nums[i-(k+1)]); // 这一句的意思表示在在这个哈希集合中只能存在k+1个元素进行比较,这样可以满足i与j最大的距离小于等于k的条件了

3. 利用 !set.add(nums[i])来判断hashset中是否存在重复元素,(长见识啊!,第一次知道set.add(i)是boolean类型的,一直以为是void)

代码如下:

public boolean containsNearbyDuplicate(int[] nums, int k) {
Set<Integer> set =new HashSet<Integer>();
for(int i =0; i< nums.length; i++){
if(i>k) set.remove(nums[i-k-1]);
if(!set.add(nums[i])) return true;
}
return false;
}

Contain Duplicate III 题目要求:

题目要求:

题目要求:在一个给定的数组中找出是否存在两个数字,且两个重复的元素之间的距离不能大于K,且两个重复元素的值相差不能大于t

个人思路:

1.可以尝试利用哈希表进行求解

2.先将数组的值以及位置放入哈希表中

3.对哈希表中的元素进行排序

4.找出所有元素之间相差小于t的项

5.再找出这些项之间的差是否小于k。

这个题未完待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: