首页 > 其他分享 >1385. 两个数组间的距离值

1385. 两个数组间的距离值

时间:2024-09-09 22:05:04浏览次数:1  
标签:cnt right int mid 距离 arr2 数组 1385 left

题目链接 1385. 两个数组间的距离值
思路 二分查找
题解链接 官方题解
关键点 标准库的利用;二分循环不变式(开区间):nums[left] < target && nums[right] >= target
时间复杂度 \(O((n+m)\log m)\)
空间复杂度 \(O(1)\)

代码实现:

class Solution:
    def findTheDistanceValue(self, arr1: List[int], arr2: List[int], d: int) -> int:
        arr2.sort()
        n = len(arr2)

        def lower_bound(val):
            left, right = -1, n
            while left+1 < right:
                mid = (left+right)//2
                if arr2[mid] < val:
                    left = mid
                else:
                    right = mid
            return right

        cnt = 0
        for x in arr1:
            p = lower_bound(x)
            if (p == n or abs(x - arr2[p]) > d) and (
                p == 0 or abs(x - arr2[p - 1]) > d
            ):
                cnt += 1

        return cnt
Python-官方库
class Solution:
    def findTheDistanceValue(self, arr1: List[int], arr2: List[int], d: int) -> int:
        arr2.sort()
        cnt = 0
        for x in arr1:
            p = bisect_left(arr2, x)
            if (p == len(arr2) or abs(x - arr2[p]) > d) and (
                p == 0 or abs(x - arr2[p - 1]) > d
            ):
                cnt += 1

        return cnt

标签:cnt,right,int,mid,距离,arr2,数组,1385,left
From: https://www.cnblogs.com/WrRan/p/18405428

相关文章

  • 最短编辑距离
    算法1(线性DP)$O(n^2)$1.状态定义f[i][j]:所有将a[1~i]变成b[1~j]的操作方式的操作次数的最小值2.状态计算:如何分类:分类方式一般考虑的是最后一步a的前i个字母,b的前j个字母,共有三种操作;1.删除:a[1到i-1]==b[1到j],删除a[i],即方程为f[i-1][j]+1;2......
  • 鹏哥C语言14---数组
    //------------------------------------------------------------------9.数组//--------------------------------------------------------9.1数组的定义// arr[]={,,,,,};//数组里边可以存放一组相同类型的元素#include<stdio.h>intmain(){   //---------......
  • 【模板题】二分法 - 34. 在排序数组中查找元素的第一个和最后一个位置
    题目链接34.在排序数组中查找元素的第一个和最后一个位置思路二分法题解链接【视频讲解】二分查找总是写不对?三种写法,一个视频讲透!(Python/Java/C++/C/Go/JS)关键点模板题;应当熟练掌握时间复杂度\(O(\logn)\)空间复杂度\(O(1)\)代码实现:#闭区间d......
  • 【洛谷 P1996】约瑟夫问题 题解(数组+模拟+循环)
    约瑟夫问题题目描述个人围成一圈,从第一个人开始报数,数到的人出列,再由下一个人重新从开始报数,数到的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰名小朋友,而该题是全部出圈。输入......
  • 小红的数组回文值
    小红的数组回文值题目描述小红定义一个数组的回文值是:修改最少数量的元素值得该数组回文,这个次数即数组的回文值。例如,${3,2,4,3}$的回文值是$1$,只需要将第二个元素修改为$4$即可。现在小红拿到了一个数组,她希望你求出所有子序列的回文值之和。你能帮帮她吗?定义子序列为......
  • 51nod 1050 循环数组最大子段和
    51nod1050循环数组最大子段和虽然是板子题,两种做法,我们先写一种,另一个咕咕。因为是循环,所以分为两种,中间的和两边的,中间的直接dp求最大,两边的转化一下就是总的数字和减去中间的最小数字和。#include<bits/stdc++.h>usingnamespacestd;#definelllonglonglla[500005]......
  • Java基础 | 数组 | 一维数组 | 二维数组 | 数组初始化 | 索引
    目录一维数组什么是数组数组定义格式格式一格式二数组初始化数组动态初始化什么是动态初始化动态初始化格式动态初始化格式详解等号左边等号右边数组静态初始化什么是静态初始化静态初始化格式完整版格式简化版格式示例代码数组元素访问什么是索引访问数......
  • 【C++学习笔记】数组与指针(三)
    目录一、数组1.1数组声明与赋值1.2数组的特点特点1:任意类型均可创建数组特点2:固定大小特点3:内存连续且有序特点4:C++无数组下标越界错误特点5:数组变量不记录数据1.3遍历数组普通for循环foreach增强循环1.4字符数组1.5多维数组二维数组三维数组遍历二维数......
  • 【算法笔记】树状数组/Binary Indexed Tree/Fenwick Tree
    前言树状数组,即树形存储的数组,又称BinaryIndexedTree或FenwickTree。抛开它树形的存储结构,这种神奇的数据结构的应用看起来与「树」没什么关系:有一个序列\(A=(A_1,A_2,\dots,A_N)\),在不超过\(\mathcalO(\logN)\)的时间复杂度内完成下列操作:\(\to~\)求\([L,R]\)区间内所......
  • 【算法笔记】【专题】RMQ 问题:ST表/树状数组/线段树
    0.前言好久没更算法笔记专栏了,正好学了新算法来更新……这也是本专栏的第一个专题问题,涉及到三种数据结构,如果写得有问题请各位大佬多多指教,谢谢!1.关于RMQ问题RMQ的全称是RangeMinimum/MaximumQuery,即区间最大/最小值问题。本文中,我们的算法以求最大值为例(最小值基本......