Loading... > https://leetcode.cn/problems/find-indices-with-index-and-value-difference-i/description/?envType=daily-question&envId=2024-05-02 题目要求是大于等于,所以可以设两个指针 `left` 和 `right` ,使 `right - left == indexDifference` ,这样就保证了两个指针至少差 `indexDifference` 。为了满足两个数差的绝对值大于等于 `valueDifference` ,可以记录 `[0, right]` 之间的最大值和最小值,把它们和 `nums[right]` 比较,如果大于 `valueDifference` 就返回。如果遍历完 `nums` 都没有找到结果,直接返回 `[-1, -1]` 即可。 ```c++ class Solution { public: std::vector<int> findIndices(std::vector<int>& nums, int indexDifference, int valueDifference) { const int n = nums.size(); int minPos = 0, maxPos = 0; for (int left = 0, right = indexDifference; right < n; left++, right++) { if (nums[left] < nums[minPos]) minPos = left; if (nums[left] > nums[maxPos]) maxPos = left; if (nums[right] - nums[minPos] >= valueDifference) return {minPos, right}; if (nums[maxPos] - nums[right] >= valueDifference) return {maxPos, right}; } return {-1, -1}; } }; ``` - 时间复杂度:$O(n)$ 。 - 空间复杂度:$O(1)$ 。 最后修改:2024 年 05 月 25 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏