leetcode第 357/358 场周赛
2817. 限制条件下元素之间的最小绝对差
可能别人有更好的解法,我这写法是不断往线段树中插入数值,每次先插入nums[i-x],然后搜索(1到i)中的最大值和(i到max)中的最小值去更新ans。
class Solution {
public:struct node{int mx,mn;int lson,rson;};int cnt = 1;void insert(int pos,int l,int r,int d,vector<node>&tree){tree[pos].mx = max(tree[pos].mx,d);tree[pos].mn = min(tree[pos].mn,d);if(l==r)return;int mid = (l+r)>>1;if(d<=mid){if(tree[pos].lson==0){tree[pos].lson = cnt++;tree[cnt-1].mn = (1<<30);}insert(tree[pos].lson,l,mid,d,tree);}else{if(tree[pos].rson==0){tree[pos].rson = cnt++;tree[cnt-1].mn = (1<<30);}insert(tree[pos].rson,mid+1,r,d,tree);}}int getmx(int pos,int l,int r,int L,int R,vector<node>&tree){if(L<=l && r<=R)return tree[pos].mx;int mid = (l+r)>>1;int mx = 0;if(L<=mid && tree[pos].lson)mx = getmx(tree[pos].lson,l,mid,L,R,tree);if(mid<R && tree[pos].rson)mx = max(mx,getmx(tree[pos].rson,mid+1,r,L,R,tree));return mx;}int getmn(int pos,int l,int r,int L,int R,vector<node>&tree){if(L<=l && r<=R)return tree[pos].mn;int mid = (l+r)>>1;int mx = (1<<30);if(L<=mid && tree[pos].lson)mx = getmn(tree[pos].lson,l,mid,L,R,tree);if(mid<R && tree[pos].rson)mx = min(mx,getmn(tree[pos].rson,mid+1,r,L,R,tree));return mx;}int minAbsoluteDifference(vector<int>& nums, int x) {int tnx=0;for(auto i:nums)tnx = max(tnx,i);vector<node>tree(nums.size()<<5);int ans = (1<<30);tree[0].mn = (1<<30);for(int i=0;i<nums.size();++i){if(i-x>=0)insert(0,1,tnx,nums[i-x],tree);int d = getmx(0,1,tnx,1,nums[i],tree);if(d)ans = min(ans,nums[i]-d);d = getmn(0,1,tnx,nums[i],tnx,tree);if(d!=(1<<30))ans = min(ans,d-nums[i]);}return ans;}
};
看了看别人题解,直接用set写是真的牛。自己还是见识短浅了。
2813. 子序列最大优雅度
暴力乱搞,考虑两种极端情况,一种无脑选profit大的,一种优先选不同类型的。
我们先选不同类型的,记录值,然后选profit大的没选过的, 更新一下值,然后选完后就会变成profit前k个的情况。取最大值就行。
class Solution {
public:bool flag[100010];long long findMaximumElegance(vector<vector<int>>& items, int k) {sort(items.begin(),items.end(),[](vector<int>&a,vector<int>&b){return a[0]>b[0];});map<int,int>mp;auto cmp = [](pair<int,int> a,pair<int,int> b){return a.first>b.first;};priority_queue<pair<int,int> ,vector<pair<int,int>>, decltype(cmp)>que(cmp);long a=0,b=0;int cnt =0;long long tp = 0,dc = 0;long long ans = 0;vector<bool>flag(items.size());int num = 0;for(int i=0;i<items.size();++i){if(dc<k){if(!mp[items[i][1]]){que.push({items[i][0],items[i][1]});mp[items[i][1]] = 1;dc++;flag[i] = 1;tp+=items[i][0];ans = max(ans,tp+dc*dc);num++;}}elsebreak;}for(int i=0;i<k;++i){if(num<k && flag[i] ==0){tp += items[i][0];num++;}else if(!que.empty() && flag[i] ==0){auto [a,b] = que.top();tp-= a-items[i][0];dc--;que.pop();}ans = max(ans,tp+dc*dc);}return ans;}
};
2812. 找出最安全路径
先通过一遍bfs计算出每一个点的安全系数
然后从(0,0)开始跑bfs,每次选择安全系数最大的点,并记录每条路径中最小的安全系数。
class Solution {
public:struct node{int x,y,val;bool operator<(const node &a)const{return val<a.val;}};int maximumSafenessFactor(vector<vector<int>>& grid) {int n = grid.size();int m = grid[0].size();vector dis(n,vector<int>(m,(1<<30)));queue<pair<int,int>>q;for(int i=0;i<n;++i)for(int j=0;j<m;++j)if(grid[i][j]){dis[i][j] = 0;q.push({i,j});}int f[] = {0,-1,0,1,1,0,-1,0};while(!q.empty()){auto [x,y] = q.front();q.pop();for(int i=0;i<4;++i){int nx = x+f[i<<1];int ny = y+f[i<<1|1];if(nx>=0 && nx<n && ny>=0 &&ny<m){if(dis[nx][ny]>dis[x][y]+1){dis[nx][ny] = dis[x][y]+1;q.push({nx,ny});}}}}vector cost(n,vector<int>(m,0));vector flag(n,vector<bool>(m,0));priority_queue<node>que;que.push({0,0,dis[0][0]});cost[0][0] = dis[0][0];while(!que.empty()){auto u = que.top();que.pop();if(flag[u.x][u.y])continue;flag[u.x][u.y] = 1;for(int i=0;i<4;++i){int nx = u.x+f[i<<1];int ny = u.y+f[i<<1|1];if(nx>=0 && nx<n && ny>=0 &&ny<m){if(cost[nx][ny]<cost[u.x][u.y] && !flag[nx][ny]){cost[nx][ny] = min(cost[u.x][u.y],dis[nx][ny]);que.push({nx,ny,dis[nx][ny]});}}}}return cost[n-1][n-1];}
};
2818. 操作使得分最大
统计每一个数字的最大区间 [ L , R ] [L,R] [L,R],满足当 L < = l < = i 且 i < = r < = R L<=l<=i 且 i<=r<=R L<=l<=i且i<=r<=R时,该区间的分数为 n u m s [ i ] nums[i] nums[i],这个区间使用单调栈统计,然后每个 n u m [ i ] num[i] num[i]可以被使用次数就为 ( i − L + 1 ) ∗ ( R − i + 1 ) (i-L+1)*(R-i+1) (i−L+1)∗(R−i+1)。最后把数字从大到小排序,然后选择k个即可。
class Solution {
public:const int mod = 1e9+7;int maximumScore(vector<int>& nums, int k) {vector<int> score(nums.size());auto calscore = [](int a){int ret = 0;for(int i=2;i*i<=a;++i){if(a%i==0){ret++;while(a%i==0)a/=i;}}if(a!=1)ret++;return ret;} ;for(int i=0;i<nums.size();++i)score[i] = calscore(nums[i]);vector<int>pre(nums.size());vector<int>sa(nums.size(),nums.size());stack<int>ddz;for(int i=0;i<nums.size();++i){while(!ddz.empty() && score[i]>score[ddz.top()]){sa[ddz.top()] = i;ddz.pop();}if(ddz.empty())pre[i] = -1;else pre[i] = ddz.top();ddz.push(i);}auto cmp = [](pair<int,long long>a,pair<int,long long>b){if(a.first==b.first)return a.second<b.second;return a.first<b.first;};priority_queue< pair<int,long long>, vector<pair<int,long long> > , decltype(cmp) > que(cmp);for(int i=0;i<nums.size();++i){que.push({nums[i],(sa[i]-i)*(i-pre[i])});}long long ans = 1;auto qpow = [=](long long a,long long b)->long long{long long ret = 1;while(b){if(b&1) ret = (a*ret)%mod;a = a*a%mod;b>>=1;}return ret;};while(k){auto [x,y] = que.top();que.pop();ans = ans*qpow(x,min(y,1ll*k))%mod;k -= min(y,1ll*k);}return ans;}
};
相关文章:
leetcode第 357/358 场周赛
2817. 限制条件下元素之间的最小绝对差 可能别人有更好的解法,我这写法是不断往线段树中插入数值,每次先插入nums[i-x],然后搜索(1到i)中的最大值和(i到max)中的最小值去更新ans。 class Solution { public:struct node{int mx,…...
Jmeter 分布式性能测试避坑指南
在做后端服务器性能测试中,我们会经常听到分布式。那你,是否了解分布式呢?今天,我们就来给大家讲讲,在企业实战中,如何使用分布式进行性能测试,实战过程中,又有哪些地方要特别注意&a…...

基于SpringCloud的会议室预约系统Java基于微服务的会议室报修系统【源码+lw】
💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、微信小程序、Python、Android、大数据等,大家有这一块的问题可以一起交流! 💕💕…...

idea设置忽略大小写
1.点击file 2.点击settings 3.点击Editor选项 4.点击general选项 5.点击code completion 6.点击左上角match case...

re学习(35)攻防世界-no-strings-attached(动调)
参考文章:re学习笔记(28)攻防世界-re-no-strings-attached_Forgo7ten的博客-CSDN博客 攻防世界逆向入门题之no-strings-attached_攻防世界 no-strings-attached_沐一 林的博客-CSDN博客 本人题解: 扔入Exepeinfo中查壳和其他信息…...

STM32 F103C8T6学习笔记8:0.96寸单色OLED显示屏显示字符
使用STM32F103 C8T6 驱动0.96寸单色OLED显示屏: OLED显示屏的驱动,在设计开发中OLED显示屏十分常见,因此今日学习一下。一篇文章从程序到显示都讲通。 文章提供源码、原理解释、测试工程下载,测试效果图展示。 目录 OLED驱动原理—IIC通信…...

vscode的配置和使用
1.侧边栏调整大小 放大:View -> Appearance -> Zoom in(快捷键Ctrl ) 缩小:View -> Appearance -> Zoom out(快捷键Ctrl -) 侧边栏字体调整到合适大小后,可以按下一步调整代码区…...

SpringBoot统⼀功能处理
前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 本章是讲Spring Boot 统⼀功能处理模块,也是 AOP 的实战环节&…...
LeetCode 每日一题 2023/8/14-2023/8/20
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 8/14 617. 合并二叉树8/15 833. 字符串中的查找与替换8/16 2682. 找出转圈游戏输家8/17 1444. 切披萨的方案数8/18 1388. 3n 块披萨8/19 2235. 两整数相加8/20 8/14 617. 合…...
进入微服务阶段后的学习方法
微服务SpringCloud学习的特点 陌生,多,复杂。 技术陌生,技术栈多,实现复杂。 学习方式 对于每一个组件: 1.知道是什么、有什么用 2.知道操作步骤(跟着讲义操作即可),包括&#…...
C/C++中const关键字详解
为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下:…...
【2023新教程】树莓派4B开机启动-树莓派第一次启动-树莓派不使用显示器启动-树莓派从购买到启动一步一步完全版!
背景 闲来无事,在咸鱼上买了一个树莓派4B。买来配件都十分齐全,于是就想着启动来测试一下。下面是树莓派无显示器第一次启动的全过程,包含安装系统。 网上的教程大多需要额外使用显示器、鼠标、键盘之类的外设。然而,树莓派本身就…...
LA@2@1@线性方程组和简单矩阵方程有解判定定理
文章目录 矩阵方程有解判定定理线性方程组有解判定特化:齐次线性方程组有解判定推广:矩阵方程 A X B AXB AXB有解判定证明推论 矩阵方程有解判定定理 线性方程组有解判定 线性方程组 A x b A\bold{x}\bold{b} Axb有解的充分必要条件是它的系数矩阵A和增广矩阵 ( A , b ) (A,…...

如何使用ChatGPT创作一个小说式的虚构的世界
世界构建也许是小说写作中最重要的一环,但也可能非常耗时。让ChatGPT加快这一过程吧。 写小说最棒的一点就是有机会从零开始创造一个新世界。你可以创造超凡脱俗的景观,赋予人物魔法。神话故事可以存在于你小说中的现实世界,而传统可以帮助你…...

用于量子通信和互联网的光量子芯片
近年来,新兴的光量子芯片在量子通信和量子互联网领域取得了重大进展。光量子芯片芯片具有可扩展、稳定和低成本等特点,为微型化应用开辟了新的可能性。 7月14日,一篇发表在《light: science & applications》的文章概述了用于量子通信的光…...

11. Vuepress2.x 关闭夜间模式
修改 docs/.vuepress/config.ts 配置文件 设置 themeConfig.darkMode属性详见 官网 module.exports {host: localhost, // ipport: 8099, //端口号title: 我的技术站, // 设置网站标题description: 描述:我的技术站,base: /, //默认路径head: [// 设置 favor.ico&a…...
netty实现websocket通信
调用注意: 1、端口一定要是可以访问的。 2、依赖必须注意和其他版本冲突,比如redis的springboot starter包,会与5.0版本冲突。 <netty.version>4.1.74.Final</netty.version> <dependency><groupId>io…...
两个list如何根据一个list中的属性去过滤掉另一个list中不包含这部分的属性,用流实现
你可以使用Java 8的流来实现这个功能。假设你有两个包含对象的List,每个对象有一个属性,你想根据一个List中的属性值来过滤掉另一个List中不包含这个属性值的对象。下面是一种使用流的方式来实现这个功能 import java.util.ArrayList; import java.util…...

Blender 混合现实3D模型制作指南【XR】
本教程分步展示如何: 减少 3D 模型的多边形数量,使其满足 Microsoft Dynamics 365 Guides 和使用 Microsoft Power Apps 创建的应用程序中包含的混合现实组件的特定性能目标的性能需求。将 3D 模型的多种材质(颜色)组合成可应用于…...
kubeasz在线安装K8S集群单master集群(kubeasz安装之二)
一、介绍 Kubeasz 是一个基于 Ansible 自动化工具,用于快速部署和管理 Kubernetes 集群的工具。它支持快速部署高可用的 Kubernetes 集群,支持容器化部署,可以方便地扩展集群规模,支持多租户,提供了强大的监控和日志分…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...