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。
这个题未完待续。。。