首页 > 其他分享 >[LeetCode] 1385. Find the Distance Value Between Two Arrays

[LeetCode] 1385. Find the Distance Value Between Two Arrays

时间:2024-11-14 09:18:41浏览次数:1  
标签:Distance 10 Arrays Two high int arr2 arr1 low

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

Constraints:
1 <= arr1.length, arr2.length <= 500
-1000 <= arr1[i], arr2[j] <= 1000
0 <= d <= 100

两个数组间的距离值。

给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。

「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。

思路

这道题的最优解是二分法。注意题设,对于元素 arr1[i],我们要去 arr2 里面看是否存在一个 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。暴力的做法就是线性扫描,但是这会使得整体的复杂度达到 O(n^2) 。

优化的思路是我们需要对 arr2 进行排序,这样我们可以用二分法来查找 arr2[j] 。但是排序过后,我们需要会拆解这个绝对值的式子。满足 |arr1[i] - arr2[j]| <= d,即是
-d <= arr1[i] - arr2[j] <= d
那么就是arr2[j] - d <= arr1[i] <= arr2[j] + d

也就是说arr1[i]需要介于 [arr2[j] - d, arr2[j] + d] 之间。此时我们就可以用二分法了。如果发觉元素 arr1[i] 不在这个区间内,则说明距离值不满足。

复杂度

时间O(nlogn)
空间O(1)

代码

Java实现

class Solution {
    public int findTheDistanceValue(int[] arr1, int[] arr2, int d) {
        Arrays.sort(arr2);
        int res = 0;
        for (int num : arr1) {
            int low = num - d;
            int high = num + d;
            if (!helper(low, high, arr2)) {
                res++;
            }
        }
        return res;
    }

    private boolean helper(int low, int high, int[] nums) {
        int left = 0;
        int right = nums.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] >= low && nums[mid] <= high) {
                return true;
            } else if (nums[mid] < low) {
                left = mid + 1;
            } else if (nums[mid] > high) {
                right = mid - 1;
            }
        }
        return false;
    }
}

标签:Distance,10,Arrays,Two,high,int,arr2,arr1,low
From: https://www.cnblogs.com/cnoodle/p/18545344

相关文章

  • 力扣.1 两数之和 N 种解法 two-sum
    数组系列力扣数据结构之数组-00-概览力扣.53最大子数组和maximum-subarray力扣.128最长连续序列longest-consecutive-sequence力扣.1两数之和N种解法two-sum力扣.167两数之和IItwo-sum-ii力扣.170两数之和IIItwo-sum-iii力扣.653两数之和IVtwo-sum-......
  • GAN, Generative Adversarial Networks(生成式对抗网络)
    深度学习中最有趣的领域–GAN,GenerativeAdversarialNetworks(生成式对抗网络)GAN的基础概念GAN被“卷积网络之父”YannLeCun(杨立昆)誉为「过去十年计算机科学领域最有趣的想法之一」,是近年来火遍全网,AI研究者最为关注的深度学习技术方向之一。生成式对抗网络,简称G......
  • 【菜笔cf刷题日常-1600】C. Good Subarrays(思维,前缀和)
    链接:Problem-1398C-Codeforces思路:考虑每一个新加入的数对于原有序列(长度、数的总和)需求的变化:如1的加入对于原有序列需求无变化;2 的加入需要原有序列长度增加1;0 的加入需要原有序列数的总和增加1;……因此,将每个数减1(如1变为0,0变为 -1)来代表这个数的......
  • 力扣 653. 两数之和 IV 二叉树/binary-tree two-sum IV
    数组系列力扣数据结构之数组-00-概览力扣.53最大子数组和maximum-subarray力扣.128最长连续序列longest-consecutive-sequence力扣.1两数之和N种解法two-sum力扣.167两数之和IItwo-sum-ii力扣.170两数之和IIItwo-sum-iii力扣.653两数之和IVtwo-sum-IV力......
  • [CF1935E] Distance Learning Courses in MAC 题解
    [CF1935E]DistanceLearningCoursesinMAC难度正常的一道题。首先我们发现“挑选若干个区间”就是一句废话,因为按位或只会贡献答案而不会减小答案。所以我们需要在\([L,R]\)的每个区间都挑一个数,使得最终的按位或最大。想办法让尽可能多的二进制位都变成\(1\),且越是高......
  • Distance Metrics in Vector Search
    from: https://weaviate.io/blog/distance-metrics-in-vector-search Vectordatabases -like Weaviate -use machinelearningmodels toanalyzedataand calculatevectorembeddings.Thevectorembeddingsare storedtogetherwiththedata inadataba......
  • AFPN: Asymptotic Feature Pyramid Network for Object Detection-afpn
    paper可以借鉴的点:下采样和上次样融合两个不同尺度特征图fromcollectionsimportOrderedDictimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFdefBasicConv(filter_in,filter_out,kernel_size,stride=1,pad=None):ifnotpad:p......
  • 第四届算法、微芯片与网络应用国际会议(AMNA 2025) 2025 4th International Conference
    重要信息官网:https://ais.cn/u/vEbMBz......
  • 力扣 170. 两数之和 III - 数据结构设计 two-sum III
    数组系列力扣数据结构之数组-00-概览力扣.53最大子数组和maximum-subarray力扣.128最长连续序列longest-consecutive-sequence力扣.1两数之和N种解法two-sum力扣.167两数之和IItwo-sum-ii力扣.170两数之和IIItwo-sum-iii力扣.653两数之和IVtwo-sum-IV力......
  • Meta-Network
    Meta-Network是一种整合多个数据来源和多种网络信息的网络分析方法,用于研究复杂生物系统中的不同层次关系(如基因、蛋白质、微生物等)以及它们之间的交互。Meta-Network分析可以在多组学和生态学等研究中实现网络的整合和多尺度分析。Meta-Network的核心思想Meta-Network的核......