Leetcode---376周赛---中位数贪心

题目列表

2965. 找出缺失和重复的数字

2966. 划分数组并满足最大差限制

2967. 使数组成为等数数组的最小代价

2968. 执行操作使频率分数最大

一、找到缺失和重复的数字

由于数据范围不是很大,可以直接暴力统计每个数字出现的次数,时间复杂度为O(n^2)

class Solution {
public:vector<int> findMissingAndRepeatedValues(vector<vector<int>>& grid) {vector<int>ans(2);int n=grid.size();vector<int>cnt(n*n+1);for(int i=0;i<n;i++){for(int j=0;j<n;j++){cnt[grid[i][j]]++;}}for(int i=1;i<=n*n;i++){if(cnt[i]==2){ans[0]=i;}else if(cnt[i]==0){ans[1]=i;}}return ans;}
};

二、划分数组并满足最大差限度

这题题目说的不是很清楚,这里的"子数组"不要求连续,即与数字的顺序无关(可以看示例),所以我们可以直接排序, 然后找元素的最大最小值,简单模拟一下

class Solution {
public:vector<vector<int>> divideArray(vector<int>& nums, int k) {vector<vector<int>>ans;int n=nums.size();sort(nums.begin(),nums.end());for(int i=0;i<n;i+=3){if(nums[i+2]-nums[i]<=k)ans.push_back({nums[i],nums[i+1],nums[i+2]});elsereturn {};}return ans;}
};

三、使数组成为等数数组的最小代价

这题的难点有两个:

1、回文数怎么处理?

2、抛开回文数,只看x,我们该如何选择x让它的代价尽可能的小?

问题1:回文数,要求左右数字对应相等,即我们只要枚举它的前半部分然后对称过去,就能得到一个回文数,我们这里选择先预处理得到数据范围内的所有回文串,具体看代码

问题2:如何选择x?这里是中位数贪心的思想,即x选择数组中的中位数最好。为什么?

结合上面两个问题的思路,我们来看看该如何写?首先我们有所有的回文数,然后我们通过中位数贪心知道,我们选择的回文数要尽可能的在中间位置,可以用二分找到附近的回文串,进行比较,找到最符合条件的

//预处理
vector<int>v;
int init=[](){for(int i=1;i<=10000;i*=10){//枚举回文串的前缀for(int j=i;j<i*10;j++){int x=j/10;int y=j;while(x){y=y*10+x%10;x/=10;}v.push_back(y);    }if(i<=1000){//i==10000会超范围,比如 12345 54321 数量级为1e9for(int j=i;j<i*10;j++){int x=j;int y=j;while(x){y=y*10+x%10;x/=10;}v.push_back(y);    }}}v.push_back(1000000001);//方便后面计算return 0;
}();class Solution {
public:long long minimumCost(vector<int>& nums) {sort(nums.begin(),nums.end());//中位数贪心一定要先排序int n=nums.size();auto cost=[&](int x)->long long{long long s=0;for(int i=0;i<n;i++)s+=abs(x-nums[i]);return s;};//找中位数附近的回文串,如果n为奇数,nums[(n-1)/2]为正中间那个数,如果n为偶数,nums[(n-1)/2]为中间两个数的左边那个int i=lower_bound(v.begin(),v.end(),nums[(n-1)/2])-v.begin();//如果n为奇数,不成立(因为(n-1)/2==n/2),得找前面的回文数和它比较//如果n为偶数,则nums[n/2]为中间两个数的右边那个,即v[i]在两个数之间,正好符合中位数贪心,直接放回if(nums[n/2]>=v[i])return cost(v[i]);//否则需要比较return min(cost(v[i]),cost(v[i-1]));}
};

四、执行操作使频率分数最大

这题其实也和中位数贪心有关。为了让一个数成为出现次数最大的众数,那么我们操作的这些数肯定是相邻的,因为它们本身就很接近,这样我们将单一数字变成我们希望的众数的操作次数才会尽可能的少,才能有更多的操作次数让其他的数更有可能变成我们想要的众数,增加众数的频率。

那么选择什么数作为众数比较好呢?

如果我们选择了一些连续的数字进行操作,那么根据中位数贪心的原理,我们选择的众数最好是这些数字的中位数,这样其它数字到它的距离之和才会是最小的,也就是操作次数最少。如果操作次数>k,就需要去掉一些数,如果操作次数<=k,就增加一些数,很明显的滑动窗口

代码如下

class Solution {typedef long long LL;
public:int maxFrequencyScore(vector<int>& nums, long long k) {sort(nums.begin(),nums.end());int ans=0;int n=nums.size();vector<LL>pre(n+1);for(int i=0;i<n;i++)pre[i+1]=pre[i]+nums[i];function<LL(LL,LL)>check=[&](LL l,LL r)->LL{LL mid=(l+r)/2;//这里的中位数下标要算对LL left=(mid-l)*nums[mid]-(pre[mid]-pre[l]);//中位数左边的数需要的操作数LL right=pre[r+1]-pre[mid+1]-(r-mid)*nums[mid];//中位数右边的数需要的操作数return left+right;};for(int l=0,r=0;r<n;r++){while(check(l,r)>k)l++;ans=max(ans,r-l+1);}return ans;}
};

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

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

相关文章

【Java中序列化的原理是什么(解析)】

&#x1f341;序列化的原理是什么&#xff1f; &#x1f341;典型-----解析&#x1f341;拓展知识仓&#x1f341;Serializable 和 Externalizable 接门有何不同? &#x1f341;如果序列化后的文件或者原始类被篡改&#xff0c;还能被反序列化吗?&#x1f341;serialVersionU…

【SpringCloud笔记】(9)分布式配置中心之Config

Config 概述 分布式系统当前面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务&#xff0c;每个服务的粒度相对较小&#xff0c;因此系统中会出现大量的服务。 比如&#xff1a;有n个微服务连接同一套数据库&#xff0c;当连接数据库需要发生变动时&…

Exploring the Limits of Masked Visual Representation Learning at Scale论文笔记

论文名称&#xff1a;EVA: Exploring the Limits of Masked Visual Representation Learning at Scale 发表时间&#xff1a;CVPR2023 作者及组织&#xff1a;北京人工智能研究院&#xff1b;华中科技大学&#xff1b;浙江大学&#xff1b;北京理工大学 GitHub&#xff1a;http…

ARM串口通信编程实验

完成&#xff1a;从终端输入选项&#xff0c;完成点灯关灯&#xff0c;打开风扇关闭风扇等操作 #include "gpio.h" int main() {char a;//char buf[128];uart4_config();gpio_config();while(1){//接收一个字符数据a getchar();//发送接收的字符putchar(a);switch(…

redis复习笔记01(小滴课堂)

高并发的必备两大“核技术”队列和缓存 介绍本地缓存和分布式缓存 Nosql介绍和Reidis介绍 Linux服务器源码安装Redis6和相关依赖 在路径下上传压缩包。 上传压缩包。 版本更新了&#xff0c;但这是临时的。 版本更新了。 解压压缩包&#xff1a; 重命名&#xff1a; 我们可以看…

C# WPF上位机开发(MySql访问)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了数据库sqlite&#xff0c;不过这是一种小型的数据库&#xff0c;作为内部使用还可以。但是&#xff0c;如果要与外面的其他供应商进…

蓝牙物联网在智慧医疗中的应用

物联网技术开启了万物互联的时代&#xff0c;并且随着智慧城市建设的加速推进及物联网技术对各行业的逐步渗透&#xff0c;“智慧”概念应运而生&#xff0c;诸如智慧能源、智慧交通、智慧医疗等“遍地开花”&#xff0c;可以说&#xff0c;物联网技术给各行业带来了产业模式上…

Arduino/Android 蓝牙通信系统设计解决方案

随着当今安全管理的发展需求以及国家对安全监控行业的支持&#xff0c;这几年&#xff0c;安全监控行业发展迅猛&#xff0c;各类监控系统百花齐放。传统的温度监控系统通过有线或其他方式传送温度数据&#xff0c;而本文提出了利用蓝牙无线传输数据的设计方案&#xff0c;这种…

FLStudio21中文版水果编曲软件好用吗?如何下载最新版本

FL Studio21版是一款在国内非常受欢迎的多功能音频处理软件&#xff0c;我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 21版还为用户们准备了超多的音乐乐器伴奏&#xff0c;我们可以直接一键调取自己需要的音调。 FL Studio21版不仅拥有非常…

金和OA C6 gethomeinfo sql注入漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 gethomeinfo接口处存在SQL注入漏洞&#xff0c;攻击者除了可以利用 SQL 注入漏洞获取…

vue3+ts pinia存储及持久化

index.ts 需要安装pinia-plugin-persist npm i pinia-plugin-persist -Simport { createPinia} from "pinia" // 引入批量的pinia持久存储插件 import piniaPluginPersist from pinia-plugin-persist const storecreatePinia(); store.use(piniaPluginPers…

【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

TCP三次握手在Wireshark数据包中是如何体现的&#xff1f;在此之前&#xff0c;先熟悉TCP三次握手的流程。 TCP三次握手流程 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的传输层协议。在建立 TCP 连接时&#xff0c;需要进行三次握手&#xff0c;防止因为…

【自然语言处理】用Python从文本中删除个人信息-第二部分

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

uni-app pages.json之globalStyle全局页面样式配置

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

STM32软硬件CRC测速对比

硬件CRC配置 以及软硬件CRC速度对比 使用CUBEMX配置默认使用的是CRC32&#xff0c;从库中可以看出这一点 HAL库提供了以下两个计算函数 HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 这个函数用于在已有的CRC校验结果的基础上累积…

听GPT 讲Rust源代码--src/tools(26)

File: rust/src/tools/clippy/clippy_lints/src/methods/iter_out_of_bounds.rs 在Rust源代码中&#xff0c;iter_out_of_bounds.rs文件是Clippy lints库的一部分&#xff0c;该库用于静态代码分析&#xff0c;用于检测Rust代码中的潜在问题和错误。iter_out_of_bounds.rs文件中…

第三天:对ThreadLocal理解

ThreadLocal是什么&#xff1f; ThreadLocal&#xff0c;也就是线程本地变量。如果你创建了一个 ThreadLocal变量&#xff0c;那么访问这个变量的每个线程都会有这个变量的一个本地副本&#xff0c;多个线程操作这个变量的时候&#xff0c;实际是操作自己本地内存里面的变量&a…

5G NTN与“手机直连卫星”快速原型

5G非地面网络(5G NTN) 5G非地面网络(Non-Terrestrial Network, NTN)是一项旨在使5G用户终端(5G UE)连接到 位于卫星上的非地面基站(5G gNB)的技术NTN是3GPP R17版本的重要功能&#xff0c;在5G-Advanced中持续演进&#xff0c;已成为3GPP Release 18 工作计划中的重要组成部分…

Wi-Fi、蓝牙、ZigBee等多类型无线连接方式的安全物联网网关设计

随着物联网和云计算技术的飞速发展.物联网终端的数量越来越多&#xff0c;终端的连接方式也更趋多样化&#xff0c;比如 Wi-Fi蓝牙和 ZigBee 等。现有的物联网网关大多仅支持一种或者几种终端的接人方式。无法满足终端异构性的需求。同时&#xff0c;现有的物联网网关与终端设备…

php 不加后缀访问

实现不带后缀访问php文件的方法&#xff1a;首先在htaccess文件中加入内容“RewriteRule ^(api/token) token.php [L]”&#xff1b;然后通过根目录下的“token.php”来接受“api/token”&#xff1b;最后修改配置文件。 考虑的做法有&#xff1a; HTTP重写技术&#xff0c;让…