首页 > 其他分享 >[LeetCode] 2903. Find Indices With Index and Value Difference I

[LeetCode] 2903. Find Indices With Index and Value Difference I

时间:2024-05-26 13:22:30浏览次数:27  
标签:2903 Index indexDifference nums int valueDifference Value abs answer

You are given a 0-indexed integer array nums having length n, an integer indexDifference, and an integer valueDifference.

Your task is to find two indices i and j, both in the range [0, n - 1], that satisfy the following conditions:
abs(i - j) >= indexDifference, and
abs(nums[i] - nums[j]) >= valueDifference
Return an integer array answer, where answer = [i, j] if there are two such indices, and answer = [-1, -1] otherwise. If there are multiple choices for the two indices, return any of them.

Note: i and j may be equal.

Example 1:
Input: nums = [5,1,4,1], indexDifference = 2, valueDifference = 4
Output: [0,3]
Explanation: In this example, i = 0 and j = 3 can be selected.
abs(0 - 3) >= 2 and abs(nums[0] - nums[3]) >= 4.
Hence, a valid answer is [0,3].
[3,0] is also a valid answer.

Example 2:
Input: nums = [2,1], indexDifference = 0, valueDifference = 0
Output: [0,0]
Explanation: In this example, i = 0 and j = 0 can be selected.
abs(0 - 0) >= 0 and abs(nums[0] - nums[0]) >= 0.
Hence, a valid answer is [0,0].
Other valid answers are [0,1], [1,0], and [1,1].

Example 3:
Input: nums = [1,2,3], indexDifference = 2, valueDifference = 4
Output: [-1,-1]
Explanation: In this example, it can be shown that it is impossible to find two indices that satisfy both conditions.
Hence, [-1,-1] is returned.

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

找出满足差值条件的下标 I。

给你一个下标从 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 可能 相等 。

思路一 - 暴力解

两层 for 循环,遍历所有可能的 i 和 j,判断是否满足条件。

复杂度

时间复杂度:O(n^2)
空间复杂度:O(1)

代码

Java实现

class Solution {
    public int[] findIndices(int[] nums, int indexDifference, int valueDifference) {
        int n = nums.length;
        int[] res = new int[] { -1, -1 };
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (Math.abs(i - j) >= indexDifference && Math.abs(nums[i] - nums[j]) >= valueDifference) {
                    res[0] = i;
                    res[1] = j;
                }
            }
        }
        return res;
    }
}

思路二 - 滑动窗口

一个更好的思路是使用滑动窗口。这里我们滑动窗口的尺寸是固定的,为 indexDifference。我们用一个 for 循环,遍历所有可能的 i,然后创建另一个变量 j,使得 j 和 i 的距离一直保持为 indexDifference。在遍历的过程中,因为 i 和 j 的距离满足题目的要求了,所以我们可以在遍历的过程中记录 j 遇到的最大值和最小值,当走到某个 i 位置的时候,如果发现 nums[i] - min >= valueDifference 或者 max - nums[i] >= valueDifference,我们就可以返回 [minIndex, i] 或者 [maxIndex, i],就说明找到一个可行解了。

复杂度

时间复杂度:O(n)
空间复杂度:O(1)

代码

Java实现

class Solution {
    public int[] findIndices(int[] nums, int indexDifference, int valueDifference) {
		int[] res = new int[] { -1, -1 };
		int j;
		int max = nums[0];
		int min = nums[0];
		int maxIndex = 0;
		int minIndex = 0;
		for (int i = indexDifference; i < nums.length; i++) {
			j = i - indexDifference;
			if (nums[j] > max) {
				max = nums[j];
				maxIndex = j;
			}
			if (nums[j] < min) {
				min = nums[j];
				minIndex = j;
			}
			if (nums[i] - min >= valueDifference) {
				return new int[] { minIndex, i };
			}
			if (max - nums[i] >= valueDifference) {
				return new int[] { maxIndex, i };
			}
		}
		return res;
    }
}

标签:2903,Index,indexDifference,nums,int,valueDifference,Value,abs,answer
From: https://www.cnblogs.com/cnoodle/p/18213554

相关文章

  • Go - Choosing a value or pointer receiver
    ChoosingavalueorpointerreceiverTherearetworeasonstouseapointerreceiver.Thefirstissothatthemethodcanmodifythevaluethatitsreceiverpointsto.Thesecondistoavoidcopyingthevalueoneachmethodcall.Thiscanbemoreefficien......
  • Tensors of the same index must be on the same device and the same dtype except `
    避免使用 torch.set_default_dtype(torch.float64) 可以尝试采用model.Double或者model.to(torch.Double)m=torch().to(device).to(torch.float64)     参考:Tensorsofthesameindexmustbeonthesamedeviceandthesamedtypeexcept`step`t......
  • html中如何改变value返回值在页面的位置
    如果您想在HTML页面上更改一个元素(如 <div> 或 <span>)的 value 返回值或者内容的位置,通常可以通过JavaScript来实现。以下是一种常见的方法:HTML结构:首先在HTML中定义一个元素,例如 <div>,并为其设置一个 id 以便JavaScript可以选择该元素进行操作。<!DOCTYPE......
  • 探索Go语言的原子操作秘籍:sync/atomic.Value全解析
    引言​在并发编程的世界里,数据的一致性和线程安全是永恒的话题。Go语言以其独特的并发模型——goroutine和channel,简化了并发编程的复杂性。然而,在某些场景下,我们仍然需要一种机制来保证操作的原子性。这就是sync/atomic.Value发挥作用的地方。原子性:并发编程的基石​......
  • Further Generalizations of the Jaccard Index
    目录概JaccardIndex推广到multisets推广到MultiplesetsCostaL.Furthergeneralizationsofthejaccardindex.2021.概本文介绍了JaccardIndex(JaccardSimilarity),和它的一些变种.JaccardIndex对于两个普通的集合\(A,B\),它们的JaccardIndex为\[J(......
  • 全球2023年自然科学指数(Nature Index),各单位排名表
    地址:https://www.nature.com/nature-index/annual-tables/2023/institution/all/all/global自然科学指数(NatureIndex)大揭秘!近日,自然指数官网更新自然指数排名数据(统计时间节点为2022.11.1-2023.10.31),中国高校表现依旧强势。统计结果显示,重庆大学进入全球排名TOP200,位列全球......
  • python DataFrame之MultiIndex 的使用
    importpandasaspdimportpprintasp#嵌套列表arrays=[['a','a','b','b'],[1,2,1,2]]#创建MultiIndexindex=pd.MultiIndex.from_arrays(arrays,names=('letter','number'))#使用MultiInd......
  • LlamaIndex RAG 和ReAct结合使用
    LlamaIndexRAG和ReAct结合使用示例代码:importosos.environ['OpenAI_API_KEY']='sk-pxxxxhU7F5Zrc'os.environ['SERPAPI_API_KEY']='950fbdxxxx9b0fexxxx'#加载电商财报数据fromllama_index.coreimportSimpleDirectoryReaderA_doc......
  • 整合LlamaIndex与LangChain构建高级的查询处理系统
    构建大型语言模型应用程序可能会颇具挑战,尤其是当我们在不同的框架(如Langchain和LlamaIndex)之间进行选择时。LlamaIndex在智能搜索和数据检索方面的性能令人瞩目,而LangChain则作为一个更加通用的应用程序框架,提供了更好的与各种平台的兼容性。本篇文章将介绍如何将LlamaIndex和La......
  • [999] Update table values in a geodatabase using arcpy
    Toupdatevaluesinafeatureclasswithinageodatabaseusingacrpy,wecanuseanUpdateCursor.UsinganUpdateCursorYoucanusean arcpy.da.UpdateCursortoiteratethroughtherowsofyourfeatureclassandupdatespecificfields.Hereisanexample......