Leetcode题库-存在重复元素2(java语言版)
2019-03-28 00:11
323 查看
题目描述:
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。
示例 1:
输入: nums = [1,2,3,1], k = 3 输出: true
示例 2:
输入: nums = [1,0,1,1], k = 1 输出: true
示例 3:
输入: nums = [1,2,3,1,2,3], k = 2 输出: false
本题思路很明确。就用用查找表和滑动窗口进行处理。(推荐)
第一种思路:暴力for循环,两层for,然后将所要求的条件进行判断。得出结果,时间复杂度高,容易超时。不推荐
第二种思路:查找表和滑动窗口进行处理。本体要求,两个元素相等,并且下标绝对值差要小于等于k。看似很简单,但是一些小细节还是值得注意的。将元素存到map中,如果健存在,证明两个元素相同,这样的话将map中的键对应的索引值赋值个变量j,然后进行比较,判断map中相等值对应的下标,与当前值的下标差是否小于k.小于返回true。然后将当前相等值和下标存储到map中用于下一次的判断。
代码如下:
[code] public static void main(String[] args){ int a[] =new int[]{1,0,1,1}; int k = 1; // 第一种方法,暴力for循环 // for (int i=0;i<a.length;i++){ // for (int j = i+1;j<a.length;j++){ // if (a[i]==a[j]&&Math.abs ( i-j )<=k){ // System.out.println(i+" "+j); // System.out.println("true"); // } // } // } // System.out.println("false"); // 第二种方法(双指针法,快慢指针加了一个限定(Math.abs ( i-j )<=k),相当于滑动窗口(有滑动限定))+map存储元素 int j; Map<Integer,Integer> map = new HashMap <> ( ); for (int i =0;i<a.length;i++){ // 当map中存在数组元素时,证明两个元素相同 if (map.containsKey ( a[i] )){ // 让j等于map中与数组元素相等的那个键对应值 j=map.get ( a[i] ); // 判断新的这个(遍历后的)索引和Map中的索引的差是否小于k,小于则输出true。 if (Math.abs ( i-j )<=k){ System.out.println("true"); } //将新的索引值添加到map中 map.put ( a[i],i ); }else { // 向map中添加元素 map.put ( a[i] ,i); } } System.out.println("false"); //
执行结果:
执行用时:
总结:这道题看似简单,蕴含的东西还是挺丰富的,查找表的选择。条件的判断等。都值得细细揣摩。
2019-3-27
相关文章推荐
- Leetcode题库-存在重复元素3(java语言版)
- leetcode 287. Find the Duplicate Number 数组重复元素查询 + 环的存在判定 + 快慢指针 + 很妙的想法
- 存在重复元素 - LeetCode
- 【LeetCode-面试算法经典-Java实现】【219-Contains Duplicate II(包含重复元素II)】
- LeetCode217.python实现: 存在重复元素问题☆
- [leetcode]存在重复元素[javascript]
- leetcode217. 存在重复元素
- 存在重复元素 II - LeetCode
- [leetcode]存在重复元素 II[javascript]
- [Leetcode] 82. 删除排序链表中的重复元素 II java
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
- 【LeetCode】Python实现-217. 存在重复元素
- leetcode 220. 存在重复元素 III
- 【LeetCode】Python实现-219. 存在重复元素 II
- 【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】
- leetcode219. 存在重复元素 II
- (Java) LeetCode 83. Remove Duplicates from Sorted List —— 删除排序链表中的重复元素
- (Java) LeetCode 82. Remove Duplicates from Sorted List II —— 删除排序链表中的重复元素 II
- leetcode-java.T015_3Sum---给定一个n个元素的数组,是否存在a,b,c三个元素,使用得a+b+c=0,找出所有符合这个条件的三元组
- [Leetcode] 83. 删除排序链表中的重复元素 java