Leetcode 3134. Find the Median of the Uniqueness Array

  • Leetcode 3134. Find the Median of the Uniqueness Array
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3134. Find the Median of the Uniqueness Array

1. 解题思路

这一题一开始没有自力搞定也是有点惭愧,思路上其实还挺好想的,看了一下其他大佬们的思路之后就是恍然大悟的感觉,就是一个简单的二分法,我们先随意给出一个值k,然后看unique element的个数不少于k个的subarray的个数有多少个。

显然,对于长度为n的数组,其subarray的个数共有 C n + 1 2 = n ( n + 1 ) 2 C_{n+1}^{2} = \frac{n(n+1)}{2} Cn+12=2n(n+1)个,因此,对于中位数 M M M,必然满足unique element的个数不少于 M M M个的subarray的个数至少为 ⌊ C n + 1 2 2 ⌋ + 1 \lfloor\frac{C_{n+1}^{2}}{2}\rfloor +1 2Cn+12+1个,且对于 M − 1 M-1 M1,其个数必然少于 ⌊ C n + 1 2 2 ⌋ + 1 \lfloor\frac{C_{n+1}^{2}}{2}\rfloor +1 2Cn+12+1个。

因此,我们使用二分法进行查找就行了。

于是,剩下的问题就是怎么对任意一个 k k k去求unique element的个数不少于k个的subarray的个数了,这个我们使用一个滑动窗口就可以了,倒是也不复杂。

2. 代码实现

给出python代码实现如下:

class Solution:def medianOfUniquenessArray(self, nums: List[int]) -> int:n = len(nums)N = n * (n+1) // 2M = N // 2 + 1def count(m):ans = 0cnt = {}i, j = 0, 0while i < n:while j < n and len(cnt) < m:if nums[j] not in cnt:cnt[nums[j]] = 1else:cnt[nums[j]] += 1j += 1if len(cnt) < m:breakans += n-j+1cnt[nums[i]] -= 1if cnt[nums[i]] == 0:cnt.pop(nums[i])i += 1return ansi, j = 1, nwhile j-i>1:m = (i+j) // 2if count(m) >= M:i = melse:j = mreturn i

提交代码评测得到:耗时2852ms,占用内存35.2MB。

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

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

相关文章

求解亲和数

【问题描述】 古希腊数学家毕达哥拉斯在自然数研究中发现&#xff0c;220的所有真约数&#xff08;即不是自身 的约数&#xff09;之和为&#xff1a; 1245101120224455110284。而284的所有真约数为1、2、4、71、142&#xff0c;加起来恰好为220。人 们对这样的数感到很惊奇&am…

Spring Cloud架构进化实操:Eureka、Apollo、OpenFeign、Ribbon、Zuul组件

文章目录 前言一、引出二、服务注册与发现2.1 创建Eureka注册中心2.1.1 引入pom依赖2.1.2 配置yaml2.1.3 启动服务21.4 测试访问 2.2 创建服务提供者2.2.1 配置yaml2.2.2 启动服务2.2.3 测试访问 2.3 创建服务消费者2.3.1 服务提供者接口2.3.2 服务消费者调用接口 三、负载均衡…

用户中心(优化)

文章目录 功能扩充管理员修改用户信息管理员删除用户管理员添加用户添加个人主页&#xff0c;可以完善个人信息&#xff08;上传头像没有实现&#xff09;添加默认头像打造一个所有用户可发帖的页面前端页面&#xff0c;√后端建表&#xff0c;接口&#xff0c;√前后端联调√ …

W801学习笔记二十:宋词学习应用

前三章完成了唐诗的应用&#xff0c;本章将实现宋词的学习应用。 宋词与唐诗的区别不大&#xff0c;马上开始。 1、我们需要参考前面唐诗的方式&#xff0c;把宋词文本下载下来&#xff0c;并进行格式整理。 W801学习笔记十七&#xff1a;古诗学习应用——上 2、在菜单中添加…

[论文阅读]Adversarial Autoencoders(aae)和代码

In this paper, we propose the “adversarial autoencoder” (AAE), which is a probabilistic autoencoder that uses the recently proposed generative adversarial networks (GAN) to perform variational inference by matching the aggregated posterior of the hidden …

proxmox宿主机安装桌面

装完proxmox启动后一般进入shell界面&#xff0c;之后都是另外一台电脑连接web管理等操作&#xff0c;一直用起来还好。不过这样需要另外一台电脑连接管理操作&#xff0c;有时候调试时毕竟还是会有些不方便&#xff0c;就想能不能在宿主机上装个桌面做这类事&#xff0c;今天用…

python数据分析——大数据和云计算

大数据和云计算 前言一、大数据二、大数据定义三、数据存储单位四、大数据存储技术五、大数据应用技术六、大数据特征七、数据容量八、数据类型的多样性8.1结构化数据8.2半结构化数据8.3非结构化数据 九、获取数据的速度十、可变性十一、真实性十二、复杂性十三、价值十四、云计…

传输控制协议TCP

一、TCP简介 TCP是面向连接的&#xff1a; TCP连接只能有两个端点&#xff0c;TCP连接是点对点的&#xff1b; TCP提供可靠交互的服务&#xff1b; TCP提供全双工通信。 面向字节流&#xff1a; TCP中的“流”指的是流入或流出进程的字节序列&#xff1b; 虽然应用程序和…

理解 python 中的* 打包和解包

注意&#xff0c; 本文的打包和解包的概念有点类似与java 的装箱和解箱 但是还是有点区别 java 中的装箱指的是 把一系列的值让放入1个对象的属性中 而python的打包概念 包括 把一组元素打包成1个list or tuple把一系列 key value pair 打包成1个dict Python * 的基本功能&a…

Mac基于Docker-ubuntu构建c/c++编译环境

编译环境安装和使用被充分验证&#xff0c;如有期望补充的内容欢迎留言评论。 目录 前言 Docker desktop下载安装 修改镜像源 选择ubuntu镜像 docker容器启动 参数说明: 宿主机与docker容器文件共享 宿主机与docker容器拷贝文件 为 Ubuntu 配置 ssh、vim、make 相关工…

Flyway使用教程

Flyway使用教程 背景&#xff1a; 在开发环境对多个不同版本的分支进行开发&#xff0c;如果此时涉及到多张表结构修改&#xff08;比如新增字段&#xff09;&#xff0c;而在测试环境时却忘了整理SQL 脚本给测试人员执行&#xff0c;就会导致出现 bug&#xff0c;从而影响测试…

Android selinux权限

一.SE 概述 SELinux 是由美国NSA&#xff08;国安局&#xff09;和 SCC 开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的&#xff0c;2000年以 GNU GPL 发布。从 fedora core 2开始&#xff0c; 2.6内核的版本都支持SELinux。 在 SELinux 出现之前&#…

神经网络模型里面权重衰减的理解

概述 神经网络模型里面&#xff0c;如果少部分参数的绝对值相对其他值过大&#xff0c;就会造成模型过度依赖于某些特征&#xff08;由这些较大值所代表&#xff09;&#xff0c;从而更容易产生过拟合问题。因而&#xff0c;我们有必要针对权重设置一种衰减措施&#xff0c;避…

PHP ASCII码的字符串用mb_convert_encoding 转utf-8之后不生效

检测数据类型是ascii,转码之后再检测还是utf-8没生效 private function toUTF8($str){$encode mb_detect_encoding($str, array("ASCII",UTF-8,"GB2312","GBK",BIG5,LATIN1));if ($encode ! UTF-8) {$str1 mb_convert_encoding($str, UTF-8, …

个人银行账户管理程序(2)

在&#xff08;1&#xff09;的基础上进行改进 1&#xff1a;增加一个静态成员函数total&#xff0c;记录账户总金额和静态成员函数getTotal 2对不需要改变的对象进行const修饰 3多文件实现 account。h文件 #ifndef _ACCOUNT_ #define _ACCOUNT_ class SavingAccount {pri…

力扣经典150题第五十三题:基本计算器

目录 力扣经典150题第五十六题&#xff1a;基本计算器示例提示解题思路 力扣经典150题第五十六题&#xff1a;基本计算器 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数&#xf…

C#中环境变量

环境变量 什么是环境变量Environment.GetEnvironmentVariable 用于获取指定环境变量的值怎么知道环境变量存不存在&#xff1f;不存在怎么创建&#xff1f; 什么是环境变量 环境变量是操作系统中存储的一种机制&#xff0c;用于保存与操作系统环境和应用程序运行相关的配置信息…

HTML 建立列表——列表标签

HTML 建立列表——列表标签 建立和使用列表 定义列表 <dl></dl>列表标签定义列表; <dt>定义列表标题; <dd>定义列表内容; 说明: 1. dt和dd对应着的, 一个dt可以对应着多个dd; 2. dd完全是为了dt服务的, 对标题进行描述; 实例: <dl> <…

NPM 基础

介绍 npm 是 JavaScript 编程语言的一个包管理器&#xff0c;它允许开发者安装、共享和管理依赖项。npm 与 Node.js 紧密集成&#xff0c;是 Node.js 生态系统中不可或缺的一部分。它提供了一个命令行工具&#xff0c;使得开发者能够轻松地安装、配置和管理项目所需的各种包。…

抓包证书安装到安卓7.0+手机

前言: 首先理解一下,这个不只是证书到浏览器,而是抓包证书到安卓7.0+手机上的文章; 还有一点区分,在浏览器上装的证书,只是让抓包工具可以抓取手机浏览器的包,而不是抓取手机app上的包; 如果你的证书只是简单的在浏览器下进行安装,那么你的手机app是走不了代理网络的…