美文网首页
leetcode-Array篇easy难度之求指定偏移量元素数量

leetcode-Array篇easy难度之求指定偏移量元素数量

作者: 茉莉清可乐对奶茶i | 来源:发表于2020-11-13 13:58 被阅读0次

    关键词

    绝对值,二分查找,上下界,TreeSet

    题目描述

    https://leetcode.com/problems/find-the-distance-value-between-two-arrays/

    Given two integer arrays arr1 and arr2, and the integer d, return the distance
     value between the two arrays.
    
    The distance value is defined as the number of elements arr1[i] such that 
    
    there is not any element arr2[j] where |arr1[i]-arr2[j]| <= d.
    
     
    
    Example 1:
    
    Input: arr1 = [4,5,8], arr2 = [10,9,1,8], d = 2
    Output: 2
    Explanation: 
    For arr1[0]=4 we have: 
    |4-10|=6 > d=2 
    |4-9|=5 > d=2 
    |4-1|=3 > d=2 
    |4-8|=4 > d=2 
    For arr1[1]=5 we have: 
    |5-10|=5 > d=2 
    |5-9|=4 > d=2 
    |5-1|=4 > d=2 
    |5-8|=3 > d=2
    For arr1[2]=8 we have:
    |8-10|=2 <= d=2
    |8-9|=1 <= d=2
    |8-1|=7 > d=2
    |8-8|=0 <= d=2
    Example 2:
    
    Input: arr1 = [1,4,2,3], arr2 = [-4,-3,6,10,20,30], d = 3
    Output: 2
    Example 3:
    
    Input: arr1 = [2,1,100,3], arr2 = [-5,-2,10,-3,7], d = 6
    Output: 1
    

    博主第一次提交的代码

    查边界的地方代码还能优化,并且排序的这个方式感觉有点多余

    class Solution {
        public int findTheDistanceValue(int[] arr1, int[] arr2, int d) {
            int min = Integer.MAX_VALUE;
            int max = Integer.MIN_VALUE;
            int[] arr2Clone = arr2.clone();
            Arrays.sort(arr2Clone);
            for(int eachArr2: arr2){
                if( eachArr2 < min){
                    min = eachArr2;
                }
                if( eachArr2 > max){
                    max = eachArr2;
                }
            }
            int result  = 0;
            for(int eachArr1: arr1){
                if( (eachArr1  - max > d  ) || (min - eachArr1 > d ) ) {
                    result++;
                }
                for(int i = 0 ; i < arr2Clone.length - 1; i++){
                    if( (eachArr1 - arr2Clone[i]) > d &&  (arr2Clone[i+1] - eachArr1) > d   ){
                        result++;
                    }
                }
            }
            return result;
            
        }
        
        
        
    }
    

    其他人优秀的代码

    https://leetcode.com/problems/find-the-distance-value-between-two-arrays/discuss/546441/Simple-Java-solution-using-TreeSet

    class Solution {
        public int findTheDistanceValue(int[] arr1, int[] arr2, int d) {
            int res = 0;
            TreeSet<Integer> ts = new TreeSet<>();
            for(int n : arr2)
                ts.add(n);
            
            for(int n : arr1){
                Integer higher = ts.ceiling(n);
                Integer lower = ts.floor(n);
                int diff = 0;
                if(higher == null){
                    diff = Math.abs(lower - n);
                }else if(lower == null){
                    diff = Math.abs(higher - n);
                }else{
                    diff = Math.min(higher - n, n - lower);
                }
                if(diff > d)
                    res++;
            }
            return res;
        }
    }
    

    相关文章

      网友评论

          本文标题:leetcode-Array篇easy难度之求指定偏移量元素数量

          本文链接:https://www.haomeiwen.com/subject/oxuvbktx.html