百度微信网站,十大小说网站排名,网站开发与客户交流,包装纸箱怎么做网站1.题目
给你一个整数数组 nums 和一个整数 k #xff0c;判断数组中是否存在两个 不同的索引 i 和 j #xff0c;满足 nums[i] nums[j] 且 abs(i - j) k 。如果存在#xff0c;返回 true #xff1b;否则#xff0c;返回 false 。
2.示例
示例 1#xff1a; 输…1.题目
给你一个整数数组 nums 和一个整数 k 判断数组中是否存在两个 不同的索引 i 和 j 满足 nums[i] nums[j] 且 abs(i - j) k 。如果存在返回 true 否则返回 false 。
2.示例
示例 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 提示
1 nums.length 105-109 nums[i] 1090 k 105 3.思路
哈希表: 首先看到数组中需要用到索引与对应的值很明显就能联想到哈希表数据结构与相关查找以减少查找速度通过遍历数组将未存在于表中的数据与相应的索引存入哈希表中然后如果遇到存在的键值的数据则找到数据的索引与当前遍历的值进行绝对值相减获取结果进行判定如果符合则返回true。如果遍历结束都没有满足则返回false
4.代码
LeetCode代码
class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {int temp;HashMapInteger,Integer map new HashMap();for (int i0;i nums.length;i){if (map.containsKey(nums[i])){temp map.get(nums[i]);if (Math.abs(temp-i)k){return true;}}map.put(nums[i],i);}return false;}
} 时间复杂度为O(n),O(1)
案例详细代码
package LeetCode18;import java.util.HashMap;public class javaDemo {public static void main(String[] args) {int nums[] new int[]{1,2,3,1};int k 3;
// 中间量int temp;boolean flag false;
// 创建哈希表HashMapInteger,Integer map new HashMap();
// 循环遍历for (int i0;i nums.length;i){
// 查找是否已经存在一样的值if (map.containsKey(nums[i])){temp map.get(nums[i]);
// 判断两者绝对值差值是否小于等于kif (Math.abs(temp-i)k){flag true;break;}}
// 如果不存在键则把键值都存放到哈希表map.put(nums[i],i);}
// 输出结果System.out.println(flag);}
}会了试试挑战下一题♪∀● ●´∀♪
LeetCode150道面试经典题-- 快乐数(简单)_Alphamilk的博客-CSDN博客