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。
这个题未完待续。。。
给定一个数组如果有重复就返回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。
这个题未完待续。。。
相关文章推荐
- AI
- Codeforces 567A. Lineland Mail
- 70.Climbing Stairs
- INSTALL_FAILED_OLDER_SDK
- 2015 Multi-University Training Contest 6
- MapReduce作业内调度研究
- os.waitpid()无法获取sys.exit()退出时的status code
- POJ 2246 Matrix Chain Multiplication
- os.waitpid()无法获取sys.exit()退出时的status code
- HDU 1789 Doing Homework again
- RHEL6.5的RAID管理
- Paint与Canvas(形状工具本质都是调用画笔工具)
- HDOJ A + B for you again 1867【KMP】
- Problem F. Flat----(2015 summer training #5)
- Problem A. Automated Telephone Exchange----(2015 summer training #5)
- Teaching Mario to play with himself: AI, machine learning, and Super Mario Bros.
- ssh登陆提示"Host key verification failed."的解决方法
- hdoj 48119 Mosaic (二维线段树 单点更新)
- 使用GCC扩展attribute,在main函数外进行操作
- adb opendir failed,Permission denied