每日一道leetcode(2026.04.19):下标对中的最大距离

每日一道leetcode(2026.04.19):下标对中的最大距离

  • [1. 题目](#1. 题目)
  • [2. 分析](#2. 分析)
  • [3. 代码实现](#3. 代码实现)

1. 题目

给你两个 非递增 的整数数组 nums1​​​​​​ 和 nums2​​​​​​ ,数组下标均 从 0 开始 计数。

下标对 (i, j) 中 0 <= i < nums1.length 且 0 <= j < nums2.length 。如果该下标对同时满足

i <= j 且 nums1i <= nums2j ,则称之为 有效 下标对,该下标对的 距离 为 j - i​​ 。​​

返回所有 有效 下标对 (i, j) 中的 最大距离 。如果不存在有效下标对,返回 0 。

一个数组 arr ,如果每个 1 <= i < arr.length 均有 arri-1 >= arri 成立,那么该数组是一个非递增 数组。

示例 1:

输入:nums1 = 55,30,5,4,2, nums2 = 100,20,10,10,5

输出:2

解释:有效下标对是 (0,0), (2,2), (2,3), (2,4), (3,3), (3,4) 和 (4,4) 。 最大距离是 2 ,对应下标对 (2,4) 。

示例 2:

输入:nums1 = 2,2,2, nums2 = 10,10,1

输出:1

解释:有效下标对是 (0,0), (0,1) 和 (1,1) 。 最大距离是 1 ,对应下标对 (0,1) 。

示例 3:

输入:nums1 = 30,29,19,5, nums2 = 25,25,25,25,25

输出:2

解释:有效下标对是 (2,2), (2,3), (2,4), (3,3) 和 (3,4) 。 最大距离是 2 ,对应下标对 (2,4) 。

提示:

1 <= nums1.length <= 105

1 <= nums2.length <= 105

1 <= nums1i, nums2j <= 105

nums1 和 nums2 都是 非递增 数组

2. 分析

这类计算最大距离和最小距离的题目特别多,感觉还是有很多相似之处。

本题有个条件非递增 的整数数组 nums1​​​​​​ 和 nums2​​​​​​ ,我一开始没有注意到 arr[i-1] >= arr[i]这句话,以为就是两个乱序的数组,但其实,这里说的是递减数组。非递增和递减肯定不是一个意思,物理吐槽。

有了这个条件,其实就可以使用滑动窗口的思路来解题。同样采用两层循环,外层循环为第一个数组的顺序遍历,内层循环为第二个数组的顺序遍历,但只需要找到第一个不满足nums1[i] <= nums2[j]就行了,想到与就找到了数组1中第i个数值对应的有效最大距离。更重要的,当遍历到数组1的i+1个下标时,内层循环只需要接着上次的遍历位置继续遍历和比较即可,因为是有序的,不需要从头开始,不然就超时了。

3. 代码实现

java 复制代码
class Solution {
    public int maxDistance(int[] nums1, int[] nums2) {
        int maxDistance = 0;
        int fromIndex = 0;
        for (int i = 0; i < nums1.length; i++) {
            // 判断是否继续循环
            if (maxDistance != 0 && maxDistance >= nums2.length - 1 - i) {
                return maxDistance;
            }
            // 从上个位置开始往后找,直到找到第一个不匹配的数据
            for (int j = fromIndex; j <= nums2.length - 1; j++) {
                if (nums1[i] > nums2[j]) {
                    fromIndex = j;
                    break;
                }
                maxDistance = Math.max(maxDistance, j - i);
            }
        }
        return maxDistance;
    }
}
相关推荐
Lsk_Smion14 分钟前
力扣实训 _ [200].岛屿数量
算法·leetcode·深度优先
Boom_Shu21 分钟前
长方形的关系
数据结构·c++·算法
ZhengEnCi1 小时前
O07-银行家算法
算法
装不满的克莱因瓶1 小时前
图像尺寸调整:缩放矩阵如何改变像素坐标?
人工智能·线性代数·数学·算法·机器学习·矩阵
Lumbrologist1 小时前
【C++】零基础入门 · 第 13 节:类与对象基础
java·c++·算法
LONGZETECH1 小时前
软硬协同+故障注入:无人机仿真维修与操控仿真底层算法逻辑拆解
大数据·c语言·算法·3d·unity·无人机
Lsk_Smion2 小时前
力扣实训 _ [543].二叉树的直径 _ [23].合并K个升序列表
数据结构·算法·leetcode
凯瑟琳.奥古斯特2 小时前
力扣1235:加权区间调度最优解
java·python·算法·leetcode·职场和发展
耶叶3 小时前
餐厅出入最少人数问题:贪心算法
算法·贪心算法