113双周赛

题目列表

2855. 使数组成为递增数组的最少右移次数

2856. 删除数对后的最小数组长度

2857. 统计距离为 k 的点对

2858. 可以到达每一个节点的最少边反转次数

一、使数组成为递增数组的最少右移次数

这题可以直接暴力求解,枚举出每种右移后的数组,将它和排完序后的数组比较,时间复杂度为O(n^2)

代码如下

class Solution {
public:int minimumRightShifts(vector<int>& nums) {vector<int> v=nums;sort(v.begin(),v.end());for(int i=0;i<nums.size();i++){if(v==nums) return i;nums.insert(nums.begin(),nums.back());nums.pop_back();}return -1;}
};

这个能过,但是有没有更快的算法,我们观察一下这个数组,如果它要是能右移成递增数组,那么它必然是由两个递增数组构成的,且前一个数组的最小值,一定大于后一个数组的最大值,答案就是第二个数组的长度,所以我们只要试着将数组拆分成两个递增数组就行(边界条件挺多,一定要细节),时间复杂度为O(n)

代码如下

class Solution {
public:int minimumRightShifts(vector<int>& nums) {int end1=0,n=nums.size();while(end1+1<n&&nums[end1]<nums[end1+1])end1++;if(end1==n-1) return 0;int end2=end1+1;while(end2+1<n&&nums[end2]<nums[end2+1])end2++;if(end2!=n-1||nums[0]<nums[n-1]) return -1;else return n-end1-1;}
};

二、删除数对后的最小数组长度

这题还是比较难想到的,比较绕。我们需要多枚举几个例子,然后就会发现,当某个数的个数cnt大于等于数组长度n的一半时,最优的方案就是将它前后的数都与它相互抵消(因为如果还让其他数相互抵消,那么剩余的和该数相抵消的元素个数就会变小,从而该元素剩下的个数就会变多),所以答案就是cnt-(n-cnt)=2*cnt-n,那么如果没有一个数的个数大于数组长度的一半呢?

首先从最特殊的数组中数字都是唯一的情况开始讨论,那么显然,当数组长度为偶数时,答案为0,当数组长度为奇数时,答案为1,那么是不是所有的情况都符合这个规律呢?答案是,确实都符合这个规律,因为所有的数的个数都<n/2,那么我们就可以通过抵消,将数的个数全部化成1

代码如下

class Solution {
public:int minLengthAfterRemovals(vector<int>& nums) {unordered_map<int,int>cnt;int n=nums.size(),ans=n&1;//n&1,奇数为1,偶数为0for(auto x:nums)++cnt[x];for(auto [x,y]:cnt)if(y>n/2)ans=max(ans,2*y-n);return ans;}
};

当然这题如果想不到这么深,那么也可以用最基本的贪心,每次拿出出现次数最大的两个元素相抵消,直到剩下零个数或剩下一个数为止。代码如下

class Solution {
public:int minLengthAfterRemovals(vector<int>& nums) {unordered_map<int,int>cnt;int n=nums.size(),ans=n&1;for(auto x:nums)++cnt[x];priority_queue<int>q;for(auto [x,y]:cnt)q.push(y);while(q.size()>1){int x=q.top();q.pop();int y=q.top();q.pop();x--,y--;if(x)q.push(x);if(y)q.push(y);}return q.empty()?0:q.top();}
};

三、统计距离为k的点对

看到两个数的和k,以及k的数据范围,我们就要想到这题能用暴力枚举点来做,然后通过枚举到的点,求出与之相对应的点的坐标,答案加上之前出现的该点个数(用哈希表统计),代码如下

class Solution {
public:int countPairs(vector<vector<int>>& coordinates, int k) {int n=coordinates.size();unordered_map<long long,int>cnt;int ans=0;for(auto& e:coordinates){int x=e[0],y=e[1];for(int i=0;i<=k;i++){auto it=cnt.find((x^i)*1000000LL+(y^(k-i)));if(it!=cnt.end())ans+=it->second;}cnt[x*1000000LL+y]++;}return ans;}
};

 四、可以到达每一个节点的最小边反转次数

这题是换根dp,即通过根节点的最小边反转次数,来得到它孩子结点的最小边反转次数,因为它的孩子结点的反转边的个数就和它父节点的最小边反转次数相差一个它俩之间的边是否需要翻转,其它的都一样。

代码如下

class Solution {
public:vector<int> minEdgeReversals(int n, vector<vector<int>>& edges) {//建图vector<vector<pair<int,int>>>g(n);for(auto& e:edges){int x=e[0],y=e[1];g[x].push_back({y,1});//顺便记录一下边的方向,1为正,-1为逆g[y].push_back({x,-1});}vector<int>ans(n);//计算根节点的最少边反转次数function<void(int,int)>dfs=[&](int x,int fa){for(auto& [y,dir]:g[x]){if(y!=fa){ans[0]+=(dir<0);//方向反的需要反转dfs(y,x);}}};dfs(0,-1);//换根dpfunction<void(int,int)>reroot=[&](int x,int fa){for(auto& [y,dir]:g[x]){if(y!=fa){ans[y]=ans[x]+dir;reroot(y,x);}}};reroot(0,-1);return ans;}
};

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

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

相关文章

什么是UWB定位技术?UWB定位的应用场景及功能介绍

说到定位我们并不陌生&#xff0c;定位技术一直与我们的生活密不可分&#xff0c;比如最常见的车辆导航。 根据使用场景&#xff0c;定位技术分为室内定位和室外定位。 室外定位主要依靠GPS&#xff0c;北斗&#xff0c;GLONASS&#xff0c;伽利略等全球卫星定位导航系统。室内…

2023年“羊城杯”网络安全大赛 决赛 AWDP [Break+Fix] Web方向题解wp 全

终于迎来了我的第一百篇文章。 这次决赛赛制是AWDP。BreakFix&#xff0c;其实就是CTFFix&#xff0c;Fix规则有点难崩。Break和Fix题目是一样的。 总结一下&#xff1a;败北&#xff0c;还是太菜了得继续修炼一下。 一、Break ezSSTI 看到是SSTI&#xff0c;焚靖直接一把梭…

AI人体行为分析:玩手机/打电话/摔倒/攀爬/扭打检测及TSINGSEE场景解决方案

一、AI人体行为分析技术概述及场景 人体姿态分析/行为分析/动作识别AI算法&#xff0c;是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算机视觉、深度学习和模式识别等技术&#xff0c;可以实现对人体姿态、动作和行为的自动化识别与分析。 在场景应用…

005-第一代光电小工具(一)

第一代光电小工具(一) 文章目录 第一代光电小工具(一)项目介绍大致原理描述核心控件QCustomPlot关于QCustomPlot 播放音频软件截图 关键字&#xff1a; Qt、 Qml、 QCustomPlot、 曲线、 SQLite 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&…

解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题

一、问题 最近学习Kubernetes&#xff0c;需要设置永久关闭SELINUX,结果修改错了一个SELINUX配置参数&#xff0c;关机重新启动后导致无法进入CentOS7系统&#xff0c;卡在启动进度条界面。 二、解决 多次重启后&#xff0c;在启动日志中发现 Faild to load SELinux poilcy…

VirtualBox解决VERR_SUPDRV_COMPONENT_NOT_FOUND错误

简述 最近使用VirtualBox时发现其增强功能不能用了&#xff0c;也就是不能双向拖拉文件&#xff0c;整了很久不知所以&#xff1b;看到有网友说跟新其VBoxGuestAdditions.ios文件&#xff0c;所以直接把我的VirtualBox从6.x升级到了7.x&#xff0c;然后就发生了眼前的一幕&…

IDEA2023新UI回退老UI

idea2023年发布了新UI&#xff0c;如下所示 但是用起来真心不好用&#xff0c;各种位置也是错乱&#xff0c;用下面方法可以回退老UI

【C++入门指南】C如何过渡到C++?祖师爷究竟对C++做了什么?

【C入门指南】C如何过渡到C&#xff1f;祖师爷究竟对C做了什么&#xff1f; 前言一、命名空间1.1 命名空间的定义1.2 命名空间使用 二、C输入、输出2.1 std命名空间的使用惯例 三、缺省参数3.1 缺省参数的定义3.2 缺省参数分类 四、函数重载4.1 函数重载概念4.2 C支持函数重载的…

如何防止商业秘密泄露(洞察眼MIT系统商业机密防泄密解决方案)

在当今的商业环境中&#xff0c;保护公司的商业秘密是至关重要的。商业秘密可能包括独特的业务流程、客户列表、研发成果、市场策略等&#xff0c;这些都是公司的核心竞争力。一旦这些信息被泄露&#xff0c;可能会对公司的生存和发展产生重大影响。本文将探讨如何通过使用洞察…

Cortex-M3/M4堆栈

一、Cortex-M3/M4堆栈操作 Cortex-M3/M4 使用的是“向下生长的满栈”模型。堆栈指针 SP 指向最后一个被压入堆栈的 32 位数值。在下一次压栈时&#xff0c; SP 先自减 4&#xff0c; 再存入新的数值&#xff0c;如图所示为堆栈的PUSH操作。 POP 操作刚好相反&#xff1a;先从 …

针对 SAP 的增强现实技术

增强现实技术是对现实世界的一种交互式模拟。这种功能受到各种企业和制造商的欢迎&#xff0c;因为它可以减少生产停机时间、快速发现问题并维护流程&#xff0c;从而提高运营效率。许多安卓应用都在探索增强现实技术。 使用增强现实技术&#xff08;AR&#xff09;的Liquid U…

获取文件上次访问时间

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Java源码 public void testGetFileTime() {try {String string "E://test.txt";File file new File(string);Path path file.toPath();BasicFileAttributes ba…

Windows安装cuda和cudnn教程最新版(2023年9月)

文章目录 cudacudnn cuda 查看电脑的cuda最高驱动版本&#xff08;适用于N卡电脑-Nvidia&#xff09; winR打开命令行&#xff0c;输入nvidia-smi 右上角cuda -version就是目前支持的最高cuda版本&#xff0c;目前是12.2 nvidia官网下载cuda 下载地址&#xff1a;https://d…

VHOST-SCSI代码分析(1)VHOST SCSI设备模拟

VHOST SCSI设备的模拟是由QEMU和HOST共同实现的&#xff0c;QEMU模拟VHOST SCSI设备配置空间等&#xff0c;而对于虚拟机通知HOST和HOST通知虚拟机机制由HOST内核实现。 在QEMU中VHOST SCSI设备继承关系如下&#xff1a; 其它设备以及对应class_init函数和realize具现化实现与V…

uni-app 之 picker选择器

uni-app 之 picker选择器 同步滚动&#xff1a;开 uni-app 之 picker选择器 一、普通选择器 二、多列选择器 三、时间选择器 四、日期选择器 一、普通选择器 <template><view><picker change"bindPickerChange" :value"index" :range&q…

基于Docker_Nginx+LVS+Flask+MySQL的高可用Web集群

一.项目介绍 1.拓扑图 2.详细介绍 项目名称&#xff1a;基于Docker_NginxLVSFlaskMySQL的高可用Web集群 项目环境&#xff1a;centos7.9&#xff0c;docker24.0.5&#xff0c;mysql5.7.30&#xff0c;nginx1.25.2,mysqlrouter8.0.21&#xff0c;keepalived 1.3.5&#xff0c;…

Pikachu XSS(跨站脚本攻击)

文章目录 Cross-Site ScriptingXSS&#xff08;跨站脚本&#xff09;概述反射型[xss](https://so.csdn.net/so/search?qxss&spm1001.2101.3001.7020)(get)反射型xss(post)存储型xssDOM型xssDOM型xss-xxss-盲打xss-过滤xss之htmlspecialcharsxss之href输出xss之js输出 Cros…

网络安全——黑客(自学)

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01;&#xff01;&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队…

MediaPipe+OpenCV 实现实时手势识别(附Python源码)

MediaPipe官网&#xff1a;https://developers.google.com/mediapipe MediaPipe仓库&#xff1a;https://github.com/google/mediapipe 一、MediaPipe介绍 MediaPipe 是一个由 Google 开发的开源跨平台机器学习框架&#xff0c;用于构建视觉和感知应用程序。它提供了一系列预训…

Otter改造 增加springboot模块和HTTP调用功能

环境搭建 & 打包 环境搭建&#xff1a; 进入 $otter_home/lib 目录执行&#xff1a;bash install.sh 打包&#xff1a; 进入$otter_home目录执行&#xff1a;mvn clean install -Dmaven.test.skip -Denvrelease发布包位置&#xff1a;$otter_home/target 项目背景 阿里…