码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-09 07:10:34      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

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。

这个题未完待续。。。

 

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

标签:

原文地址:http://www.cnblogs.com/whaochen/p/4714480.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!