首页 > 编程语言 >【leetcode每日一题】——2903. 找出满足差值条件的下标 I——python

【leetcode每日一题】——2903. 找出满足差值条件的下标 I——python

时间:2024-05-29 20:59:25浏览次数:56  
标签:2903 indexDifference nums python max1 valueDifference int abs leetcode

给你一个下标从 0 开始、长度为 n 的整数数组 nums ,以及整数 indexDifference 和整数 valueDifference 。

你的任务是从范围 [0, n - 1] 内找出  2 个满足下述所有条件的下标 i 和 j :

  • abs(i - j) >= indexDifference 且
  • abs(nums[i] - nums[j]) >= valueDifference

返回整数数组 answer。如果存在满足题目要求的两个下标,则 answer = [i, j] ;否则,answer = [-1, -1] 。如果存在多组可供选择的下标对,只需要返回其中任意一组即可。

注意:i 和 j 可能 相等 。

示例 1:

输入:nums = [5,1,4,1], indexDifference = 2, valueDifference = 4
输出:[0,3]
解释:在示例中,可以选择 i = 0 和 j = 3 。
abs(0 - 3) >= 2 且 abs(nums[0] - nums[3]) >= 4 。
因此,[0,3] 是一个符合题目要求的答案。
[3,0] 也是符合题目要求的答案。

示例 2:

输入:nums = [2,1], indexDifference = 0, valueDifference = 0
输出:[0,0]
解释:
在示例中,可以选择 i = 0 和 j = 0 。 
abs(0 - 0) >= 0 且 abs(nums[0] - nums[0]) >= 0 。 
因此,[0,0] 是一个符合题目要求的答案。 
[0,1]、[1,0] 和 [1,1] 也是符合题目要求的答案。 

示例 3:

输入:nums = [1,2,3], indexDifference = 2, valueDifference = 4
输出:[-1,-1]
解释:在示例中,可以证明无法找出 2 个满足所有条件的下标。
因此,返回 [-1,-1] 。

提示:

  • 1 <= n == nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= indexDifference <= 100
  • 0 <= valueDifference <= 50

方法一:

由于是简单题,并且数据量小所以直接暴力模拟就可以了:

class Solution:
    def findIndices(self, nums: List[int], indexDifference: int, valueDifference: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i, len(nums)):
                if abs(i - j) >= indexDifference and abs(nums[i] - nums[j]) >= valueDifference:
                    return [i,j]
        return [-1,-1]

 时间复杂度:最坏情况下是o(n^2),其中n是数组nums长度。

空间复杂度:由于没用到其他数组或变量,空间复杂度是o(1)的。

方法二:

有没有方法能实现一边遍历呢?是有的。

class Solution:
    def findIndices(self, nums: List[int], indexDifference: int, valueDifference: int) -> List[int]:
        min1 = inf; max1 = -inf
        for j in range(indexDifference,len(nums)):
            i = j - indexDifference
            if abs(nums[j] - nums[i]) >= valueDifference:
                return [i, j]
            if min1 > nums[i]:
                min1_index = i
                min1 = nums[i]
            if max1 < nums[i]:
                max1 = nums[i]
                max1_index = i
            max1 = max(max1,nums[i])
            if abs(nums[j] - max1) >= valueDifference:
                return [max1_index,j]
            if abs(nums[j] - min1) >= valueDifference:
                return [min1_index,j]
        return [-1,-1]

 通过这段代码,不难看出一个思路,我们在遍历数组nums时,同时维护最大值和最小值,并且保证最大值和最小值的下标小于等于j 减 indexDifference,那么就能保证第一个条件,并且贪心的去求第二个条件。为什么这么做是对的呢?因为当j - i 最小是indexDifference时,比 i 还要小于等于的下标是一定满足条件的。这么一来答案就能正确。

时间复杂度:o(n),n是数组nums的长度。

空间复杂度:由于只用了一些变量,所以是o(1)的。

标签:2903,indexDifference,nums,python,max1,valueDifference,int,abs,leetcode
From: https://blog.csdn.net/2301_80269840/article/details/139188616

相关文章

  • 打包迁移Python env环境
    打包迁移Pythonenv环境平常工作中可能遇到虚拟迁移python虚拟环境的场景,总结了如下几个方法。适用于同架构、相同类型系统之间的python环境迁移。方法一:使用pipfreeze和requirements.txt这种方法将当前环境中的所有包记录到一个文件中,然后在新环境中安装这些包。1.导出当前......
  • Python办公自动化之——Excel中的Python应用
    微软Excel在引入对Python的支持后,极大地扩展了其数据处理和分析能力。通过整合Python,用户不仅可以利用Excel强大的表格处理功能,还能借助Python的编程优势进行复杂的数据分析、自动化任务和高级可视化。Python的丰富库,如Pandas、NumPy、Matplotlib和Seaborn,使用户能够高效地处理大......
  • Python正则表达式实践
    Python正则表达式实践1.正则表达式简介正则表达式是一种用来描述或匹配字符串的模式。它广泛应用于字符串搜索、替换和解析。2.导入re模块Python中的正则表达式功能主要由re模块提供。你可以通过以下方式导入它:importre3.正则表达式基本语法3.1匹配单个字符.匹配......
  • 【python数据结构4】基于栈结构的简单括号匹配
    我们现在把注意力转向使用栈解决真正的计算机问题。你会这么写算术表达式(5+6)*(7+8)/(4+3)其中括号用于命令操作的执行。你可能也有一些语言的经验,如Lisp的构造(defunsquare(n)(*nn))这段代码定义了一个名为square的函数,它将返回参数的n的平方。Lisp......
  • 基于Python与水星二代摄像头的二次开发
    第一章Videocapture的正确使用大家好!关于摄像头的基本调用,相信大家以及初步学会了。我们买来这个摄像头,本来就是想着自己使用,进行二次开发的。但是大家根据OpenCV的调用函数Videocapture(),发现根本无法调用,这是为什么?首先,判断外接摄像头能否调用,我们有两个非常简单的方法:方......
  • 【Python Cookbook】S01E03 找到最大最小的N个元素
    目录问题解决方案讨论问题如何在一个集合中找到最大或最小的N个元素?解决方案使用heapq模块。pipinstallheapqheapq模块中,有nlargest()以及nsmallest()两个函数:importheapqnums=[1,8,23,2,7,-4,8,18,42,37]print(heapq.nlargest(3,n......
  • python处理EXCEL
    python处理EXCEL在Python中,有多个库可以用来操作Excel文件。其中比较常用的有openpyxl,pandas,xlsxwriter以及xlwings。下面我将分别介绍这些库及其使用方法。一、openpyxl安装pipinstallopenpyxl示例代码fromopenpyxlimportWorkbook,load_workbookfromopenp......
  • Python正则表达式
    语法关于正则表达式的相关知识,大家可以阅读一篇非常有名的博客叫《正则表达式30分钟入门教程》,读完这篇文章后你就可以看懂下面的表格,这是我们对正则表达式中的一些基本符号进行的扼要总结。符号解释示例说明.匹配任意字符b.t可以匹配bat/but/b#t/b1t等\w匹配字母/......
  • python之生成xmind
    今天为啥要说这个呢,因为前几天做接口测试,还要写测试用例,我觉得麻烦,所以我就用了python里面xmind的插件。自动生成了测试用例,数据来源是json。......
  • ChatGPT学习Python系列之Python装饰器
    ChatGPT学习Python系列之Python装饰器网上查询Python装饰器相关资料,质量层次不齐,通过问答形式利用ChatGPT3.5学习了Python装饰器相关的概念及示例,GPT给出的解答和示例代码质量非常高,总结如下。1.什么是python装饰器Python的装饰器是一种功能强大的语法,允许在不修改原始函数代......