【leetcode】Array——Contains Duplicate II(219)
2016-03-13 10:16
453 查看
题目:Given an array of integers and an integer k,
find out whether there are two distinct indices i and j in
the array such that nums[i] = nums[j] and
the difference between i and j is
at most k.
思路1:用HashMap<integer,Integer>存放nums[i]和i,当nums[i]再次出现时,比较map中的value和i
代码1:速度慢
思路2:用set,并保持map的大小为k+1,相当于维护了一个windows,判断读取的下一个nums[i]是否在set中。
代码2:速度较快,比第一个思路要快
思路3:自己构造一个数据结构,包含两个成员变量,nums[i]和i。然后根据nums[i]排序,判断相连且nums[i]相同的对象的i差值是否大于k
代码3:速度很快,比思路2的解法要快
find out whether there are two distinct indices i and j in
the array such that nums[i] = nums[j] and
the difference between i and j is
at most k.
思路1:用HashMap<integer,Integer>存放nums[i]和i,当nums[i]再次出现时,比较map中的value和i
代码1:速度慢
public boolean containsNearbyDuplicate(int[] nums, int k) { Map<Integer,Integer> map = new HashMap<>(); for(int i=0;i<nums.length;i++){ Integer index = map.get(nums[i]); if(index==null) map.put(nums[i], i); else{ if(i-index<=k) return true; else map.put(nums[i],i); } } return false; }
思路2:用set,并保持map的大小为k+1,相当于维护了一个windows,判断读取的下一个nums[i]是否在set中。
代码2:速度较快,比第一个思路要快
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; }
思路3:自己构造一个数据结构,包含两个成员变量,nums[i]和i。然后根据nums[i]排序,判断相连且nums[i]相同的对象的i差值是否大于k
代码3:速度很快,比思路2的解法要快
public class Solution { public class MyArr { int data; int index; } class mycmp implements Comparator<MyArr> { @Override public int compare(MyArr o1, MyArr o2) { return o1.data - o2.data; } } public boolean containsNearbyDuplicate(int[] nums, int k) { int len = nums.length; MyArr[] myArrs = new MyArr[len]; for (int i = 0; i < len; ++i) { myArrs[i] = new MyArr(); myArrs[i].data = nums[i]; myArrs[i].index = i; } Arrays.sort(myArrs, 0, len, new mycmp()); for (int i = 0; i < len - 1; i++) { if (myArrs[i].data == myArrs[i + 1].data && Math.abs((myArrs[i].index - myArrs[i + 1].index)) <= k) return true; } return false; } }
相关文章推荐
- 使用 flask-mail 扩展发送邮件
- sakai的工程
- pthread_cond_wait()条件变量
- [leetcode] 256. Paint House 解题报告
- AI和IA之随想
- 阿尔法完胜,人类怎么办?
- OC高效率52不要使用retainCount
- JetBrains WebStorm for Mac 10.0.4 破解版 – 下载地址及安装方法
- onSavaInstanceState的用法
- AI设计彭罗斯悖论三角教程
- 多线程 : 使用 wait 和 notify 实现进程间同步通信
- C++ 自定义namespace的使用技巧 http://jingyan.baidu.com/article/b7001fe19399fa0e7282ddb3.html
- 【leetcode】Array——Contains Duplicate(217)
- urlretrieve() 函数http://www.nowamagic.net/academy/detail/1302861
- AI感官模拟
- bzoj 3540: [Usaco2014 Open]Fair Photography
- adb failed to start daemon 彻底解决
- Aizu 0525 Osenbei【枚举+dfs】
- 人工智能——电脑模拟人类学习
- Codeforces 29C Mail Stamps 【离散化 + DFS】