首页 > 其他分享 >2080. 区间内查询数字的频率

2080. 区间内查询数字的频率

时间:2024-09-09 23:35:29浏览次数:1  
标签:right int positions 2080 mid 查询 频率 self left

题目链接 2080. 区间内查询数字的频率
思路 二分法(upper_bound - lower_bound)
题解链接 简洁写法:统计位置+二分查找(Python/Java/C++/Go/JS/Rust)
关键点 预先处理得到每个值所处位置的列表
时间复杂度 \(O(n + m \log n)\)
空间复杂度 \(O(n)\)

代码实现:

class RangeFreqQuery:

    def __init__(self, arr: List[int]):
        positions = defaultdict(list)
        for i, v in enumerate(arr):
            positions[v].append(i)
        self.positions = positions

    def query(self, L: int, R: int, value: int) -> int:
        positions = self.positions[value]
        n = len(positions)

        def upper_bound():
            left, right = -1, n
            while left + 1 < right:
                mid = (left+right) // 2
                if positions[mid] > R:
                    right = mid
                else:
                    left = mid
            return right
        
        def lower_bound():
            left, right = -1, n
            while left + 1 < right:
                mid = (left+right) // 2
                if positions[mid] < L:
                    left = mid
                else:
                    right = mid
            return right
        
        return upper_bound() - lower_bound()
Python-官方库
class RangeFreqQuery:

    def __init__(self, arr: List[int]):
        positions = defaultdict(list)
        for i, v in enumerate(arr):
            positions[v].append(i)
        self.positions = positions

    def query(self, L: int, R: int, value: int) -> int:
        positions = self.positions[value]
        return bisect_right(positions, R) - bisect_left(positions, L)

标签:right,int,positions,2080,mid,查询,频率,self,left
From: https://www.cnblogs.com/WrRan/p/18405602

相关文章

  • 查询出每个部门中,工资从高到低进行排名,工资部门排名在前 50%的员工
    1.查询出每个部门中,工资从高到低进行排名,工资部门排名在前50%的员工(比如部门有6个人,则前50%,则是前3名,如果部门人数为奇数,向下取整确定前50%的人数),如果其入职天数早于部门平均入职天数,还要列出其入职天数。如果其入职时间晚于部门平均入职天数,则入职天数显示为空要求查询的结......
  • 21.子查询
    SQL语句中嵌套SELECT语句,称谓嵌套查询,又称子查询。SELECT*FROMt1WHEREcolumn1=(SELECTcolumn1FROMt2);子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个根据子查询结果可以分为:标量子查询(子查询结果为单个值)列子查询(子查询结果为一列)行子......
  • Mybatis骚操作-通用查询工具类
    老项目大多都有对JDBC进行了封装,可以直接执行SQL的工具类,在做项目升级改造的时候(这里仅指整合mybatis),要么全部调整成dao-xml的形式(会有改动代码多的问题,而且看代码时需要xml和java来回切换),要么维持原逻辑不改动(跟mybatis基本无关,同样难以用到mybatis的配置)这里实现个可以让工具使......
  • 21.多表查询
    多表关系一对多(多对一)多对多一对一一对多案例:部门与员工关系:一个部门对应多个员工,一个员工对应一个部门实现:在多的一方建立外键,指向一的一方的主键多对多案例:学生与课程关系:一个学生可以选多门课程,一门课程也可以供多个学生选修实现:建立第三张中间表,中间表至少包含两......
  • 常见查询日志
    `cataccess.log|grepnginx|awk'{print$1}'|sort|uniq-c|sort-nr-k1|head-n10|awk-F'''{print$2"次数:"$1}'1、查看有多少个IP访问awk'{print$1}'log_file|sort|uniq|wc-l2、查看某一个页面被访问的次数:grep&qu......
  • nginx查询日志
    #!/bin/bash日志格式:$remote_addr-$remote_user[$time_local]"$request"$status$body_bytes_sent"$http_referer""$http_user_agent""$http_x_forwarded_for"LOG_FILE=$1echo"统计访问最多的10个IP"awk'{a[$1]+......
  • 3.6 MySQL基本查询大全(select、子查询、Distinct、group by分组,order排序、limit限制
    文章目录3.6.1MySQL的基本查询1.SELECT语句基本语法2.DISTINCT3.指定列,去除重复列4.给列设置别名5.使用WHERE子句查询指定条件比较判断范围判断字符串模式匹配错误判断空值判断6.使用ORDER子句对查询结果排序7.使用LIMIT限制查询结果数量3.6.2分组查询1.聚......
  • 11.DQL(数据查询语言)-分组查询
    语法:SELECT字段列表FROM表名[WHERE条件]GROUPBY分组字段名[HAVING分组后的过滤条件];where和having的区别:执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。判断条件不同:where不能对聚合函数进行判断,而having可......
  • 09.DQL(数据查询语言)-条件查询
    语法:SELECT字段列表FROM表名WHERE条件列表;条件:比较运算符 功能> 大于>= 大于等于< 小于<= 小于等于= 等于<>或!= 不等于BETWEEN…AND… 在某个范围内(含......
  • 基于二分混合空间曲线的HBase多维索引构建及查询优化问题研究
    目录1绪论11.1研究背景与意义11.2国内外研究现状21.2.1索引技术21.2.2空间填充曲线51.3论文主要工作61.4论文章节安排72相关理论基础与技术简介82.1大数据存储与计算技术82.1.1Hadoop生态圈82.1.2HDFS82.1.3HBase92.1.4SparkStreami......