leetcode:1157. 子数组中占绝大多数的元素【暴力遍历 + 随机算法相信概率】

news2025/7/21 21:44:52

目录

  • 题目截图
  • 题目分析
  • 暴力二分
  • 随机二分
  • 总结

题目截图

在这里插入图片描述

在这里插入图片描述

题目分析

  • 一个很暴力的思路就是把每个num出现的idx记录起来,然后按出现的频率排序优化
  • 每次query,遍历每个元素和频率,频率如果已经比threhold小就没有看的必要,直接break
  • 如果比它大,我们通过d获得其ids序列,左右二分其left和right得到两个下标l和r
  • 如果r - l >= threhold说明中间夹着大于threhold个,就满足了
  • 但是这个几乎超时
  • 特别地,我们可以考虑随机算法
  • 由于一个区间要么存在一个答案,要么不存在答案
  • 也就是由于2 * threhold > len([l, r])
  • 这样的话如果存在,抽不到一个符合的num的概率小于0.5
  • 如果超过k次都抽不到且又存在答案的话,这个概率是小于0.5 ^ k
  • 所以不妨k = 30,如果超过30次扔找不到答案,我们就认为它没有答案;答案在arr[l:r + 1]中随机抽取

暴力二分

class MajorityChecker:
    # threshold过半最多只有一个
    def __init__(self, arr: List[int]):
        # 记录每个值出现的index
        self.d = defaultdict(list)
        for i, v in enumerate(arr):
            self.d[v].append(i)
        # 出现频率的统计(从大到小)
        self.freq = sorted([(len(ids), value) for value, ids in self.d.items()], reverse = True)


    def query(self, left: int, right: int, threshold: int) -> int:
        for f, v in self.freq:
            if f < threshold: break
            ids = self.d[v]
            l = bisect_left(ids, left)
            r = bisect_right(ids, right)
            if r - l >= threshold:
                return v
        return -1



# Your MajorityChecker object will be instantiated and called as such:
# obj = MajorityChecker(arr)
# param_1 = obj.query(left,right,threshold)

随机二分

class MajorityChecker:
    # threshold过半最多只有一个
    def __init__(self, arr: List[int]):
        # 记录每个值出现的index
        self.arr = arr
        self.d = defaultdict(list)
        for i, v in enumerate(arr):
            self.d[v].append(i)
        # 出现频率的统计(从大到小)
        # self.freq = sorted([(len(ids), value) for value, ids in self.d.items()], reverse = True)


    def query(self, left: int, right: int, threshold: int) -> int:
        # 随机从[l, r]抽一个数
        # 如果存在答案,那么抽不到答案的概率小于0.5
        # 多次都抽不到答案,认为没有答案,返回-1
        Round = 30
        for _ in range(Round):
            choice = self.arr[random.randint(left, right)]
            l = bisect_left(self.d[choice], left)
            r = bisect_right(self.d[choice], right)
            if r - l >= threshold:
                return choice
        return -1



# Your MajorityChecker object will be instantiated and called as such:
# obj = MajorityChecker(arr)
# param_1 = obj.query(left,right,threshold)

总结

  • 使用随机算法优化
  • 通过概率论可知,随机算法确实是概率正确的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虎扑论坛数据分析

论坛为用户提供了相同的业余爱好&#xff0c;互动和交流的广阔平台&#xff0c;以及由此产生的庞大数据和复杂的用户交互场景也包含有价值的信息&#xff0c;本文关于虎扑论坛的帖子&#xff0c;个人信息分析&#xff0c;探讨虎扑论坛的用户是什么是什么特点&#xff1f;最近我…

Spring Cloud Stream绑定器架构解析与开发

Spring Cloud Stream绑定器架构解析与开发 根据不同的使用场景我们通常会选择相适应的消息中间件&#xff0c;例如对于日志收集场景可能会选择使用Kafka&#xff0c;对于订单场景通常会选择RocketMQ&#xff0c;不同消息中间件的客户端是不同的&#xff0c;我们需要针对不同消息…

智慧城市面临的机遇与挑战

区域中心城市建设需要智慧城市支撑 建设区域中心城市&#xff0c;除了需要具备在公路、铁路、航空等区域中心城市的枢纽硬件设施外&#xff0c;更需要充分发挥信息化强有力的凝聚和辐射作用&#xff0c;提升区域中心城市在区域交通枢纽服务、区域金融商贸服务、区域物流集散服务…

百趣代谢组学文献分享:茶褐素可促进胆固醇降解

​ 为了解决大家每逢过节必长胖的历史性问题&#xff0c;小编今天给大家介绍一篇发表于Nature Communications 的针对于普洱茶促进减肥的研究。 百趣代谢组学文献分享&#xff0c;所谓药食同源&#xff0c;普洱茶是我国西南云南地区特有的一种传统名茶&#xff0c;因其具有治…

[激光原理与应用-18]:《激光原理与技术》-4- 粒子数反转与“光”强放大的基本原理

目录 一、热平衡&#xff1a; 受激辐射 < 受激接收 二、 “光”相干放大 三、粒子数反转&#xff08;population inversion&#xff09; 四、实现粒子数反转的装置&#xff1a;泵浦 五、实现粒子数反转的条件 六、实现粒子数反转的工作物质 七、实现粒子数反转的方式…

【菜菜的sklearn课堂笔记】逻辑回归与评分卡-用逻辑回归制作评分卡-重复值和缺失值处理

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 在银行借贷场景中&#xff0c;评分卡是一种以分数形式来衡量一个客户的信用风险大小的手段&#xff0c;它衡量向别人借钱的人&#xff08;受信人&…

「Vue系列」欢迎传送到“Teleport”星球

前言 大家好&#xff0c;我是落叶小小少年&#xff0c;我一直谨记学习不断&#xff0c;分享不停&#xff0c;输入的最好方式是输出&#xff0c;我始终相信 用最核心代码更容易理解深的技术点用通俗易懂的话&#xff0c;讲难的知识点 之前有学习并写了KeepAlive组件的实现原理…

Nginx 报错问题汇总(持续更新ing)

目录 一、nginx: [emerg] invalid number of arguments in "include" directive in C:\Program Files\nginx-1.15.4/conf/nginx.conf:61 总结&#xff1a; 二、nginx: [error] OpenEvent("Global\ngx_reload_2152") failed (5: Access is denied) 解决方…

《Java》图书管理系统(已升级)

目录 前言 效果展示 功能模块 书架 定义书的类 创建书架 用户 User用户类 AdminUser管理员 NormalUser普通用户 功能 接口 FindOperation 查找图书 AddOperation添加图书 DelOperation删除图书 BorrowOperation借阅图书 DisOperation 打印图书 RetOperation归还图…

Spring Boot 3.0.0 GA版本正式发布,期待已久的SpringBoot3发布了

期待已久的SpringBoot3.0.0发布了发布说明新版本的亮点分析1. Java 17 baseline 和 Java 19 支持2. 支持 [GraalVM native images](https://docs.spring.io/spring-boot/docs/3.0.0/reference/html/native-image.html#native-image)&#xff0c;取代实验性的 Spring Native 项目…

linux篇【11】:linux下的线程<中序>

目录 一.线程互斥 1.三个概念 2.互斥 &#xff08;1&#xff09;在执行语句的任何地方&#xff0c;线程可能被切换走 &#xff08;3&#xff09;抢票场景中的问题 &#xff08;4&#xff09;解决方案 3.加锁 &#xff08;1&#xff09;加锁介绍 &#xff08;2&#xf…

STC 51单片机39——汇编语言 按钮流水灯

每按一下按钮&#xff0c;灯就移动一个 ORG 0000H LJMP MAIN ORG 0003H ;中断矢量 LJMP INT MAIN:SETB EA ;开总中断允许“开关” SETB EX0 ;开分中断允许“开关” SETB PX0 ;高优先级 SETB IT0 ;边沿触发 MOV A,#0FEH ;给…

Linux系统编程(二)——Linux系统IO函数

在第一篇的时候写到了系统环境的搭建以及各种调试的方法&#xff0c;接下来讲述关于系统函数的使用。 目录 0x01 标准C库IO函数和Linux系统IO函数对比 一、标准C库IO函数操作流程 二、标准C库IO和Linux系统IO的关系 三、虚拟地址空间 0x02 LinuxIO函数实例 一、open()、…

dubbo以xml方式操作和新版dubbo-admin安装

文章目录1 dubbo xml配置1.1 提供者1.1.1 提供者接口1.1.2 提供者实现类1.1.2.1 项目结构图示1.1.2.2 pom.xml1.1.2.3 实现类接口1.1.2.4 配置文件1.1.2.4.1 xml配置1.1.2.4.2 结合注解方式1.1.2.5 启动类1.1.2.5.1 直接读取配置文件1.1.2.5.2 Main.main启动1.1.3 其他方式配置…

最新持续更新Crack:LightningChart 行业使用大全

LightningChart .NET 和 JavaScript 解决方案旨在通过彻底的图表优化、最小的延迟和流畅的呈现来满足行业最苛刻的数据可视化要求。LightningChart .NET 和 JavaScript 直观的 API 使用户能够使用适用于任何桌面、移动和平板设备的鼠标和触摸屏交互功能轻松操作最复杂的图表。 …

JSP JAVA javaweb企业仓库库存管理系统(仓库进销存管理系统ssm库存管理系统仓库管理系统)

JSP 企业仓库库存管理系统&#xff08;仓库进销存管理系统ssm库存管理系统仓库管理系统&#xff09;

【附源码】计算机毕业设计JAVA疫情下的进出口食品安全信息管理系统

【附源码】计算机毕业设计JAVA疫情下的进出口食品安全信息管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

Django Cookie 与 Session 对比

文章目录原理比较语法比较Cookie 示例创建 Cookie更新 Cookie删除 CookieSession 示例创建 session查询 session删除一组键值对删除 session参考文档本文通过示例演示 Django 中如何创建、查询、删除 Cookie 与 Session。 原理比较 在Web开发中&#xff0c;使用 session 来完成…

无线监控摄像头使用什么样的物联网卡?

无线监控摄像头使用什么样的物联网卡&#xff1f; 随着安全行业的发展和进步&#xff0c;无线监控摄像头的种类越来越多&#xff0c;但主要的网络形式大致可以分为两种形式&#xff0c;一种是连接WiFi使用远程监控&#xff0c;另一种是插入物联网卡的远程监控。随着物联网的快…

初阶数据结构学习记录——열 二叉树(3)链式

链式二叉树是由指针形成的二叉树&#xff0c;之前写的二叉树是由数组组成的&#xff0c;链式由链表来做。链式二叉树每个节点有两个指针&#xff0c;指向两边。以往二叉树&#xff0c;栈&#xff0c;队列等等都需要增删查改&#xff0c;但链式二叉树则不是这样&#xff0c;是因…