0
点赞
收藏
分享

微信扫一扫

初学者关于Leetcode-1855(下标对的最大距离)的三种方法分析

未定义变量 2022-04-13 阅读 75
java

1. 题目

2. 3种解题方法:

(1)暴力解法

        直接使用双重循环去进行最大值的寻找,但使用此方法时,要考虑时间复杂度问题,单纯的使用双从循环会超出时间限制,因此此处nums2出的判断就进行了简化。代码展示:



class Solution {
    public int maxDistance(int[] nums1, int[] nums2) {
        int max=0;
        for(int i=0;i<nums1.length;i++){
            for(int j=i+max;j<nums2.length;j++){
                if(nums1[i]<=nums2[j]){
                    int cha=j-i;
                    if(cha>max){
                        max=cha;
                    }
                }else{
                        break;
                    }
               
            }
        }
        return max;
    }
}
​

(2)双指针解法

        此题还可进行双指针处理,通过遍历nums1每一位与nums2的对应位进行比较,遍历长度更短,例如i为0时,nums1显示的是下标为0的第一位,分别与nums2的每位比较,当比到nums1大于nums2的之时,后续将不再进行比较,直接让nums1的第二位即下标为1的数字跟nums2的第二位及之后的每一位进行比较,过程你与第一位数字比较方式相似。代码展示:

class Solution {
    public int maxDistance(int[] nums1, int[] nums2) {
       int i=0,j=0,maxDistance=0;
       while(i<nums1.length){
           if(j>nums2.length-1 || nums1[i]>nums2[j]){
               i++;
               j=i+maxDistance;
           }else{
               if(maxDistance<(j-i)){
                   maxDistance=j-i;    
               }
               j++;
           }
       }
        return maxDistance;
    }
}

(3)二分查找解法

        使用二分查找将left与nums1下标数进行绑定,right与nums2的范围绑定,使用两者的中间值进行最后一位大于nums1的下标数查找,然后进行最大距离的计算。代码展示:

class Solution {
   public int maxDistance(int[] nums1, int[] nums2) {
        int maxDistance=0;
        for(int i=0;i<nums1.length;i++){
            int left=i;
            int right=nums2.length-1;
            if(nums2.length-i<maxDistance){
                break;
            }
            while(left<=right){
                int mid=(left+right)>>1;

                if(nums2[mid]>=nums1[i]){
                    left=mid+1;
                    if(maxDistance<(mid-i)){
                        maxDistance=mid-i;
                    }
                }else{
                    right=mid-1;
                }
            }
        }

        return maxDistance;
    }
}
举报

相关推荐

0 条评论