題目:
給你一個下標從?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] 。
解題思路:
? ? ? ? 兩層for循環,第一層遍歷下標為0到(n-indexDifference),第二層遍歷(i+indexDifference)到n,這樣就可以保證下標差一定是滿足第一個條件的,我們只需要去判斷第二個條件是否成立即可。
代碼:
class Solution:def findIndices(self, nums: list[int], indexDifference: int, valueDifference: int) -> list[int]:n=len(nums)for i in range(n-indexDifference):for j in range(i+indexDifference,n):if abs(nums[i]-nums[j])>=valueDifference:return [i,j]return [-1,-1]
????????這段代碼定義了一個名為Solution的類,其中包含一個名為findIndices的方法。該方法接受一個整數列表nums,一個整數indexDifference和一個整數valueDifference作為輸入。它返回一個包含兩個索引i和j的列表,這兩個索引位置上的數字的絕對差至少為valueDifference,并且它們的索引距離大于等于indexDifference。
????????如果存在這樣的索引位置,則該方法返回這些索引[i, j],否則返回[-1, -1]。
????????這個實現循環遍歷了指定范圍內的索引i和j,并檢查是否滿足絕對差條件。如果滿足條件,方法會返回這兩個索引。這段代碼存當找到滿足條件的第一對索引時就返回,符合題意。
?
?