返回顶部
首页 > 资讯 > 后端开发 > Python >python数组中的 k-diff 数对例题解析
  • 694
分享到

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

2024-04-02 19:04:59 694人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、题目描述二、思路分析方法一:构建哈希表方法二:双指针三、总结一、题目描述 题目内容: 题目示例: 题目解析: 1 <= nums.length <= 104-

一、题目描述

题目内容:

题目示例:

题目解析:

  • 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 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python数组中的 k-diff 数对例题解析

本文链接: https://lsjlt.com/news/118759.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python数组中的 k-diff 数对例题解析
    目录一、题目描述二、思路分析方法一:构建哈希表方法二:双指针三、总结一、题目描述 题目内容: 题目示例: 题目解析: 1 <= nums.length <= 104-...
    99+
    2024-04-02
  • python实现数组平移K位问题
    目录python数组平移K位Python对数组进行循环移位要求分析代码实现性能分析总结python数组平移K位 def move(ls: list, offset): """...
    99+
    2023-02-06
    python数组 数组平移K位 python数组平移
  • Java C++题解 leetcode第k个数实例
    目录题目要求思路一:小根堆JavaC++思路二:多路归并【多指针】JavaC++Rust总结题目要求 思路一:小根堆 中文题目描述不太清晰,但其实由题目可以发现,当x满足条件时,3...
    99+
    2024-04-02
  • JavaScript中数组对象的示例分析
    这篇文章主要为大家展示了“JavaScript中数组对象的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中数组对象的示例分析”这篇文...
    99+
    2024-04-02
  • #7 找出数组中第k小的数
    「HW面试题」 【题目】 给定一个整数数组,如何快速地求出该数组中第k小的数。假如数组为[4,0,1,0,2,3],那么第三小的元素是1 【题目分析】 这道题涉及整数列表排序问题,直接使用sort方法按照ASCII码排序即可 【解答】 ...
    99+
    2023-01-30
    组中
  • Python中K-means算法的示例分析
    这篇文章主要介绍了Python中K-means算法的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、步骤说明(1)确定K值(决定数据聚为几类,K值是K-Means算...
    99+
    2023-06-15
  • python利用K-Means算法实现对数据的聚类案例详解
    目的是为了检测出采集数据中的异常值。所以很明确,这种情况下的簇为2:正常数据和异常数据两大类 1、安装相应的库 import matplotlib.pyplot as plt # 用于可视化 from skle...
    99+
    2022-06-02
    python K-Means算法聚类 python K-Means算法
  • Python数组实践中的问题分析
    Python数组实践中的问题分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python数组有很多的知识需要大家详细的学习。Python数组中没有数组的数据结构,但列表很...
    99+
    2023-06-17
  • 最大K个数问题的Python版解法总结
    TopK问题,即寻找最大的K个数,这个问题非常常见,比如从1千万搜索记录中找出最热门的10个关键词. 方法一: 先排序,然后截取前k个数. 时间复杂度:O(n*logn)+O(k)=O(n*logn)。 这...
    99+
    2022-06-04
    解法 个数 Python
  • Python中复数问题的示例分析
    这篇文章主要介绍Python中复数问题的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!问题关于 Python 的复数类型,以下选项中描述错误的是A复数的虚数部分通过后缀“J”或者“j”来表示B对于复数 z,可...
    99+
    2023-06-15
  • NumPy 数组:Python 面试中最常见的问题解析!
    在 Python 面试中,NumPy 数组是一个经常被提及的话题。NumPy 是一个用于科学计算的 Python 库,它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具。 本文将介绍 NumPy 数组的一些基本概念,以及在 Py...
    99+
    2023-08-30
    面试 数组 numy
  • Python数据分析案例03——天气K均值聚类分析
    聚类常用的算法肯定是K均值聚类了,本次案例采用陕西的十个地区的天气数据,构建特征,进行聚类分析。 首先数据都装在‘天气数据’这个文件夹里面,如图: 打开其中一个excel,长这个样子    下面开始数据处理 数据预处理  导入包 imp...
    99+
    2023-09-15
    python 数据分析 数据挖掘 pandas numpy
  • JavaScript中数组和对象复制的示例分析
    这篇文章给大家分享的是有关JavaScript中数组和对象复制的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、数据类型从狭义上来说,JS把所有的数据分成两大类型:基本...
    99+
    2024-04-02
  • JavaScript对象和数组的解构赋值实例分析
    本文小编为大家详细介绍“JavaScript对象和数组的解构赋值实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript对象和数组的解构赋值实例分析”文章能帮助大家解决疑惑,下面跟着小编...
    99+
    2024-04-02
  • Python真题案例之蛇形数组详解
    问题描述 输入一个正整数n 在n*n的方阵内填入1,2,3,4…n*n,要求填成蛇形。(回旋的向中间收敛) 样例输入: 4 样例输出: 不必严格按照格式输出, 问题分析 蛇形填...
    99+
    2024-04-02
  • js中数组的示例分析
    小编给大家分享一下js中数组的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!创建一个数组:// 字面量方式: ...
    99+
    2024-04-02
  • Shell中数组的示例分析
    这篇文章给大家分享的是有关Shell中数组的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,其重要应用场景,可以求数组长度,...
    99+
    2023-06-14
  • JavaScript中数组的示例分析
    这篇文章主要介绍JavaScript中数组的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!javascript是一种什么语言javascript是一种动态类型、弱类型的语言,基于对象和事件驱动并具有相对安全性...
    99+
    2023-06-14
  • Java中数组的示例分析
    小编给大家分享一下Java中数组的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按...
    99+
    2023-06-20
  • JavaScript数组面试题实例分析
    今天小编给大家分享一下JavaScript数组面试题实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 晚上下...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作