python数组中的 k-diff 数对例题解析

 更新时间:2022年06月17日 10:00:40   作者:​ 盆友圈的小可爱   ​  
这篇文章主要介绍了python数组中的 k-diff 数对例题解析,文章根据题目内容对其进行分析以此展开主题内容,感兴趣的小伙伴可以参考一下下面文章详情

一、题目描述

题目内容:

题目示例:

题目解析:

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

二、思路分析

我们拿到本题,读取题意要求在一组整数数组中,求出差值为k的数对对数k-diff。在思考如何解答该题之前,需要明确如下几点细节:

  • nums数组元素都是整数
  • 索引位置i与位置j,不能相等
  • k-diff数对关系:nums[i] - nums[j] = k -> nums[i] = nums[j] + k -〉 nums[i] - k = nums[j]
  • k-diff数对,存在相同数对情况,但结果只取1次

因此,我们的对题目中进行详细了解了,因为会排除重复的数对,我们很容易想哈希表来构建

方法一:构建哈希表

根据上述思路,我们使用python代码能快速实现,代码如下:

class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        ans = set()
        numset = set()
        for num in nums:
            if num - k in numset:
                ans.add(num-k)
            if num + k in numset:
                ans.add(num)
            numset.add(num)
        return len(ans)
  • 数对中重复场景如示例一中差值为k=1,(1,3) & (3,1)视为一种情况,则要定义两个哈希表来储存
  • 哈希表可以通过字典k-value或者集合set(),本题无需考虑索引关系定义ans,numset两个集合
  • 当 nums[i] > nums[j],则nums[j] = nums[i] - k在numset中,取最小的那一个则ans.add(nums[i]-k),
  • 当 nuns[i] < nums[j],则nums[j] = nums[i] + k 在numset中,取较小的那一个则ans.add(nums[i])

方法二:双指针

image.png

根据上述思路,使用python代码实现,代码如下:

class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        nums.sort()
        ans = 0
        j = 0
        for i in range(len(nums)):
            if i == 0 or nums[i] != nums[i-1]:
                while j < len(nums) and (nums[j] < nums[i] + k or j <= i):
                    j +=1
                if j < len(nums) and nums[j] == nums[i] + k:
                    ans +=1
        return ans
  • 首先对nums数组中的元素按照从低到高的顺序排列
  • 在递增的数组中,由于双指针 i!=j,因此i指针一定是小于j的
  • 枚举查找的判断的条件 nums[j] < nums[i]+k,指针j则往后移动
  • 当nums[j] = nums[i] + k 时,则对数次数+1

三、总结

本题可以使用哈希方法要使用两个哈希表,属于牺牲空间换取效率。双指针方法,虽然没有用额外的空间,但是速度较于方法一慢一点。

我们用第一种方法,AC提交记录如下:

  • 时间复杂度O(n),n为nums长度
  • 空间复杂度O(n),需要使用哈希表,n为nums长度

到此这篇关于python数组中的 k-diff 数对例题解析的文章就介绍到这了,更多相关python k-diff 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python数据可视化之用Matplotlib绘制常用图形

    Python数据可视化之用Matplotlib绘制常用图形

    Matplotlib能够绘制折线图、散点图、柱状图、直方图、饼图. 我们需要知道不同的统计图的意义,以此来决定选择哪种统计图来呈现我们的数据,今天就带大家详细了解如何绘制这些常用图形,需要的朋友可以参考下
    2021-06-06
  • Python利用第三方模块实现压缩css文件

    Python利用第三方模块实现压缩css文件

    在 Python 中可以使用多种方法来压缩 CSS 文件。其中一种流行的方法是使用 csscompressor 库,这个库可以帮助你压缩 CSS 代码,下文就来和大家详细聊聊
    2023-01-01
  • python爬虫parsel-css选择器的具体用法

    python爬虫parsel-css选择器的具体用法

    本文主要介绍了python爬虫parsel-css选择器的具体用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Python 爬虫模拟登陆知乎

    Python 爬虫模拟登陆知乎

    这篇文章主要介绍了Python 爬虫模拟登陆知乎的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • tf.concat中axis的含义与使用详解

    tf.concat中axis的含义与使用详解

    今天小编就为大家分享一篇tf.concat中axis的含义与使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python uuid模块使用实例

    python uuid模块使用实例

    这篇文章主要介绍了python uuid模块使用实例,本文给出简单使用示例,讲解uuid1、uuid3、 uuid4、 uuid5这几个方法,需要的朋友可以参考下
    2015-04-04
  • 社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)

    社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)

    pycharm的newproject左侧没有出现项目选项的情况下,创建Django项目的解决方法./社区版pycharm创建django项目的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-09-09
  • 详解Python中行列式的计算

    详解Python中行列式的计算

    矩阵的行列式是仅与方阵相关的标量, 这篇文章主要为大家详细介绍了如何利用Python实现行列式的计算,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • python之pygame模块实现飞机大战完整代码

    python之pygame模块实现飞机大战完整代码

    这篇文章主要为大家详细介绍了python之pygame模块实现飞机大战完整代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Python快速实现一个线程池的示例代码

    Python快速实现一个线程池的示例代码

    当有多个 IO 密集型的任务要被处理时,我们自然而然会想到多线程。而线程池的实现也很简单,因为 Python 提供了一个标准库 concurrent.futures,已经内置了对线程池的支持。所以本篇文章,我们就来详细介绍一下该模块的用法
    2022-07-07

最新评论