题目:

给你一个整数数组 nums 和一个整数 k,请你在数组中找出 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目。

k-diff 数对定义为一个整数对 (nums[i], nums[j]) ,并满足下述全部条件:

0 <= i, j < nums.length
i != j
nums[i] - nums[j] == k
注意,|val| 表示 val 的绝对值。

示例 1:

输入:nums = [3, 1, 4, 1, 5], k = 2
输出:2
解释:数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。
尽管数组中有两个 1 ,但我们只应返回不同的数对的数量。
示例 2:

输入:nums = [1, 2, 3, 4, 5], k = 1
输出:4
解释:数组中有四个 1-diff 数对, (1, 2), (2, 3), (3, 4) 和 (4, 5) 。
示例 3:

输入:nums = [1, 3, 1, 5, 4], k = 0
输出:1
解释:数组中只有一个 0-diff 数对,(1, 1) 。

提示:

  • 1 <= nums.length <= 104
  • -107 <= nums[i] <= 107
  • 0 <= k <= 107

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/k-diff-pairs-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

【哈希表】

1.先使用哈希表,对每个数值出现的次数进行计数,对于出现的重复数,出现的次数需要进行累加;

2.然后就需要根据k是否为0进行分情况讨论:

  • 当k == 0时,则需要统计数字出现次数大于1的数的个数,检查value值大于1的数的个数即可;
  • 当k != 0时,就判断key值中是否有key - k 或key + k存在,统计存在的个数即可。

java代码:

 1 class Solution {
2 public int findPairs(int[] nums, int k) {
3 HashMap<Integer, Integer> map = new HashMap<>();
4 int ans = 0;
5 //给每个值赋上value
6 for(int num : nums){
7 map.put(num, map.getOrDefault(num, 0) + 1);
8 }
9 for(int key : map.keySet()){
10 //当k为0,则需要看出现次数大于1的数的个数
11 if(k == 0){
12 if(map.get(key) > 1) ans++;
13 }else{
14 //k不为0,就判断key值是否有key+k
15 if(map.containsKey(key + k)){
16 ans++;
17 }
18 }
19 }
20 return ans;
21 }
22 }

 python3代码:

 1 class Solution:
2 def findPairs(self, nums: List[int], k: int) -> int:
3 # 创建空字典
4 map = {}
5 ans = 0
6 for num in nums:
7 # 如果当前数字存在于字典的键中,则value+1
8 if num in map:
9 map[num] += 1
10 else:
11 map[num] = 1
12 # 遍历字典的键值
13 for num,value in map.items():
14 if k == 0:
15 if value > 1:
16 ans += 1
17 else:
18 if num + k in map.keys():
19 ans += 1
20 return ans

力扣532(java&python)-数组中的 k-diff 数对(中等)的更多相关文章

  1. java将数组中的零放到末尾

    package com.shb.java; /** * 将数组中的0放到数组的后边,然后原来的非零数的顺序不改变 * @author BIN * */ public class Demo2{ publ ...

  2. 【LeetCode】1471. 数组中的 k 个最强值 The k Strongest Values in an Array (Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 自定义排序 日期 题目地址:https://leetc ...

  3. #7 找出数组中第k小的数

    「HW面试题」 [题目] 给定一个整数数组,如何快速地求出该数组中第k小的数.假如数组为[4,0,1,0,2,3],那么第三小的元素是1 [题目分析] 这道题涉及整数列表排序问题,直接使用sort方法 ...

  4. 3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中

    package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; ...

  5. 【每日一题】【找到位置返回&升序数组中第K大就是n-K小】2022年1月17日-NC88 寻找第K大

    描述有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数. 给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在. 方法 ...

  6. [LeetCode] Kth Largest Element in an Array 数组中第k大的数字

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  7. 数组中第K小的数字(Google面试题)

    http://ac.jobdu.com/problem.php?pid=1534 题目1534:数组中第K小的数字 时间限制:2 秒 内存限制:128 兆 特殊判题:否 提交:1120 解决:208 ...

  8. 找轮转后的有序数组中第K小的数

    我们可以通过二分查找法,在log(n)的时间内找到最小数的在数组中的位置,然后通过偏移来快速定位任意第K个数. 此处假设数组中没有相同的数,原排列顺序是递增排列. 在轮转后的有序数组中查找最小数的算法 ...

  9. [经典算法题]寻找数组中第K大的数的方法总结

    [经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26   字体:[大 中 小] 打印复制链接我要评论   今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...

  10. 选择问题(选择数组中第K小的数)

    由排序问题可以引申出选择问题,选择问题就是选择并返回数组中第k小的数,如果把数组全部排好序,在返回第k小的数,也能正确返回,但是这无疑做了很多无用功,由上篇博客中提到的快速排序,稍稍修改下就可以以较小 ...

随机推荐

  1. SpringBoot 学习记录 2021.05.13 Started

    环境搭建 Spring Boot 2.x Java JDK 需要安装 JDK java8 也就是 1.8, 用 jdk-8u271-windows-x64.exe 网上有很多安装java8的教程,很简 ...

  2. kettle教程--通过配置文件同步所需要的列数据

    kettle教程--通过配置文件同步所需要的列数据 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「kettle」, 免费领取全网最热的kettle实战视频教程 ht ...

  3. Android 获取设备的CPU型号和设备型号

    原文: Android 获取设备的CPU型号和设备型号-Stars-One的杂货小窝 之前整的项目的总结信息,可能不太全,凑合着用吧,代码在最下面一节 CPU型号数据 华为: ro.mediatek. ...

  4. Android7.0以上的分享图片文件错误及解决方法

    原文地址: Android7.0以上的分享图片文件错误及解决方法 - Stars-One的杂货小窝 在Android7.0以上版本,分享图片文件出现了exposed beyond app throug ...

  5. idea提交时候忽略改动部分文件

    之前因为本地开发环境和线上开发环境有区别,bootstrap.xml里的log存放位置在我本地mac不存在路径,我就只能通过修改log路径才能让项目跑起来.但是,本地修改的东西每次commit时候都显 ...

  6. Android 使用系统JAR包

    项目开发过程中,经常有需要到系统jar包,导入系统jar包后,发现无法正常编译通过,针对此问题,下文简述下如何导入framework.jar ,并正常使用 1.导入framework.jar ,使用c ...

  7. [503. 下一个更大元素 II] 单调栈

    import java.util.ArrayDeque; import java.util.Deque; class Solution { public static void main(String ...

  8. opencv-python笔记(1)

    openCV笔记 图像 灰度图像 ​ 0代表纯黑色,255代表白色(类似亮度) 通道拆分 通过索引拆分: import cv2 lena=cv2.imread("lenacolor.png& ...

  9. 记录--九个超级好用的 Javascript 技巧

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在实际的开发工作过程中,积累了一些常见又超级好用的 Javascript 技巧和代码片段,包括整理的其他大神的 JS 使用技巧,今天 ...

  10. 作用域&变量提升&闭包题目及内容解答

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 代码输出结果 (function(){ var x = y = 1; })(); var z; console.log(y); // ...