Leetcode - 147双周赛

目录

  • 一、3407. 子字符串匹配模式
  • 二、3408. 设计任务管理器
  • 三、3409. 最长相邻绝对差递减子序列
  • 四、3410. 删除所有值为某个元素后的最大子数组和

一、3407. 子字符串匹配模式

题目链接
在这里插入图片描述
字符串匹配问题,把字符串 p 分成两段 、,i 是 ’ * ’ 的下标,判断 s 是否包含这两段,且这两段处于不相交 && 有前后关系

代码如下:

class Solution {public boolean hasMatch(String s, String p) {int idx = p.indexOf('*');int i = s.indexOf(p.substring(0, idx));return i>=0 && s.substring(i+idx).contains(p.substring(idx+1));}
}

二、3408. 设计任务管理器

题目链接
在这里插入图片描述
使用哈希存当前每个 taskId,对应的 userId 和 priority,再使用堆存储 taskId 和 priority,按照 priority 排序,如果优先级相同,按照 taskId 排序。

  • TaskManager(),将数据存入哈希表和堆
  • add(),将数据存入哈希表和堆
  • edit(),更新哈希表,将更新后的数据存入堆
  • rmv(),更新哈希表 execTop(),不断的将数据排出堆,使用懒删除,如果当前数据存储在哈希表中,返回当前的 userId

代码如下:

class TaskManager {Map<Integer, int[]> map = new HashMap<>();PriorityQueue<int[]> que = new PriorityQueue<>((x,y)->x[1]==y[1]?y[0]-x[0]:y[1]-x[1]);public TaskManager(List<List<Integer>> tasks) {for(List<Integer> x : tasks){int userId = x.get(0), taskId = x.get(1), priority = x.get(2);map.put(taskId, new int[]{userId, priority});que.offer(new int[]{taskId, priority});}    }public void add(int userId, int taskId, int priority) {map.put(taskId, new int[]{userId, priority});que.offer(new int[]{taskId, priority});}public void edit(int taskId, int newP) {int[] t = map.get(taskId);t[1] = newP;map.put(taskId, t);que.offer(new int[]{taskId, t[1]});}public void rmv(int taskId) {map.remove(taskId);}public int execTop() {while(!que.isEmpty()){int[] t = que.poll();if(map.containsKey(t[0]) && map.get(t[0])[1] == t[1]){int user = map.get(t[0])[0];map.remove(t[0]);return user;}}return -1;}
}

三、3409. 最长相邻绝对差递减子序列

题目链接
在这里插入图片描述
定义 f [ i ] [ j ] f[i][j] f[i][j]: 以 x = n u m s [ i ] x = nums[i] x=nums[i] 为结尾的且与倒数第二个数的绝对值的差至少 j j j(即倒数第二个数为 x − j / x + j x-j/x+j xj/x+j)的子序列的最长长度。

对于 x = n u m s [ i ] x = nums[i] x=nums[i],题目要求两数差的绝对值是非递增的(即倒数第三个数和倒数第二个数的绝对差值 > = j >=j >=j ),分类讨论:

  • n u m s [ i ] nums[i] nums[i] 单独形成一个子序列 , f [ i ] [ j ] = 1 f[i][j] = 1 f[i][j]=1
  • 倒数第一个数和倒数第二个数的绝对差值 > j >j >j,也就是绝对差值 > = j + 1 >=j+1 >=j+1 f [ i ] [ j ] = f [ i ] [ j + 1 ] f[i][j] = f[i][j+1] f[i][j]=f[i][j+1]
  • 倒数第一个数和倒数第二个数的绝对差值 = j =j =j,也就是倒数第二个数的值为 x + j / x − j x+j/x-j x+j/xj f [ i ] [ j ] = m a x ( f [ l a s t [ x − j ] ] [ j ] , f [ l a s t [ x + j ] ] [ j ] ) f[i][j] = max(f[last[x-j]][j],f[last[x+j]][j]) f[i][j]=max(f[last[xj]][j]f[last[x+j]][j])
  • l a s t [ x ] last[x] last[x]:值为 x x x 的数在 n u m s nums nums 数组中的下标

最终 f [ i ] [ j ] = m a x ( 1 , f [ i ] [ j + 1 ] , f [ l a s t [ x + j ] ] [ j ] , f [ l a s t [ x − j ] ] [ j ] ) f[i][j] = max(1,f[i][j+1],f[last[x+j]][j],f[last[x-j]][j]) f[i][j]=max(1,f[i][j+1],f[last[x+j]][j],f[last[xj]][j])

代码如下:

class Solution {public int longestSubsequence(int[] nums) {int n = nums.length;int mx = nums[0], mn = nums[0];for(int x : nums){mx = Math.max(mx, x);mn = Math.min(mn, x);}int maxD = mx - mn;int ans = 0;int[][] f = new int[n][maxD+2];int[] last = new int[mx + 1];Arrays.fill(last, -1);for(int i=0; i<n; i++){int x = nums[i];for(int j=maxD; j>=0; j--){f[i][j] = Math.max(f[i][j+1], 1);if(x - j >= 0 && last[x - j] >= 0){f[i][j] = Math.max(f[i][j], f[last[x-j]][j] + 1);}if(x + j <= mx && last[x+j] >= 0){f[i][j] = Math.max(f[i][j], f[last[x+j]][j] + 1);}ans = Math.max(ans, f[i][j]);}last[x] = i;}return ans;}
}//定义f[x][j]:以值 x 结尾的且与倒数第二个数的绝对差值至少为 j 的子序列的最长长度
class Solution {public int longestSubsequence(int[] nums) {int n = nums.length;int mx = nums[0], mn = nums[0];for(int x : nums){mx = Math.max(mx, x);mn = Math.min(mn, x);}int maxD = mx - mn;int ans = 0;int[][] f = new int[mx+1][maxD+1];for(int x : nums){int fx = 1;for(int j=maxD; j>=0; j--){if(x-j >= 0){fx = Math.max(fx, f[x-j][j] + 1);}if(x+j <= mx){fx = Math.max(fx, f[x+j][j] + 1);}f[x][j] = fx;ans = Math.max(ans, fx);}}return ans;}
}

四、3410. 删除所有值为某个元素后的最大子数组和

题目链接
在这里插入图片描述
本题直接使用线段数来维护四个值——区间和,最大前缀和,最大后缀和,区间最大子数组和,代码如下:

class SegmentTree{private record Info(long sum, long pre, long suf, long ans){}Info[] tree;public SegmentTree(int[] nums){int n = nums.length;tree = new Info[n<<2];build(1, 0, n-1, nums);}void build(int i, int l, int r, int[] nums){if(l == r){int val = nums[l];tree[i] = new Info(val, val, val, val);return;}int m = (l + r) / 2;build(i<<1, l, m, nums);build(i<<1|1,m+1,r,nums);tree[i] = merge(tree[i<<1],tree[i<<1|1]);}Info merge(Info a, Info b){return new Info(a.sum + b.sum,Math.max(a.pre, a.sum+b.pre),Math.max(b.suf, a.suf+b.sum),Math.max(Math.max(a.ans, b.ans), a.suf+b.pre));}void update(int o, int l, int r, int i, int val){if(l == r){tree[o] = new Info(val, val, val, val);return;}int m = (l + r) / 2;if(i <= m){update(o<<1, l, m, i, val);}else{update(o<<1|1, m+1, r, i, val);}tree[o] = merge(tree[o<<1], tree[o<<1|1]);}long queryAll(){return tree[1].ans;}
}
class Solution {public long maxSubarraySum(int[] nums) {SegmentTree t = new SegmentTree(nums);long ans = t.queryAll();if(ans <= 0) return ans;int n = nums.length;Map<Integer, List<Integer>> map = new HashMap<>();for(int i=0; i<n; i++){if(nums[i] < 0)map.computeIfAbsent(nums[i], e->new ArrayList<>()).add(i);}for(List<Integer> x : map.values()){for(int i : x){t.update(1, 0, n-1, i, 0);}ans = Math.max(ans, t.queryAll());for(int i : x){t.update(1, 0, n-1, i, nums[i]);}}return ans;}
}

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

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

相关文章

SqlSugar连接达梦数据库集群超时或异常缓慢

《SqlSugar配置连接达梦数据库集群》文章中介绍SqlSugar连接达梦数据库集群&#xff0c;只需按下图所示位置添加dm_svc.conf文件&#xff0c;并在SqlSugar的连接字符串中指定服务名即可。   但在使用过程中发现&#xff0c;基于.net 6开发的WebApi&#xff0c;编译为ANYCPU&…

探秘 JMeter (Interleave Controller)交错控制器:解锁性能测试的隐藏密码

嘿&#xff0c;小伙伴们&#xff01;今天咱们要把 JMeter 里超厉害的 Interleave Controller&#xff08;交错控制器&#xff09;研究个透&#xff0c;让你从新手直接进阶成高手&#xff0c;轻松拿捏各种性能测试难题&#xff01; 一、Interleave Controller 深度剖析 所属家族…

C++内存泄露排查

内存泄漏是指程序动态分配的内存未能及时释放&#xff0c;导致系统内存逐渐耗尽&#xff0c;最终可能造成程序崩溃或性能下降。在C中&#xff0c;内存泄漏通常发生在使用new或malloc等分配内存的操作时&#xff0c;但没有正确地使用delete或free来释放这块内存。 在日常开发过程…

服务器/电脑与代码仓gitlab/github免密连接

git config --global user.name "xxxx" git config --global user.email "xxxxxx163.com" #使用注册GitHub的邮箱 生成对应邮箱的密码对 ssh-keygen -t rsa -b 4096 -C "xxxxxx163.com" 把公钥id_rsa.pub拷贝到github中 Setting----->…

Rubyer-WPF:打造优雅、精致的 WPF 用户界面

在桌面应用开发领域&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;凭借其强大的 UI 设计能力和丰富的功能&#xff0c;始终是开发者们青睐的工具之一。今天&#xff0c;我将为大家介绍一款专注于 WPF UI 设计的优秀项目——Rubyer-WPF&#xff0c;它…

蓝耘:GPU算力云服务的技术探索与AIGC应用支持

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、蓝耘的核心优势 1. 行业领先的基础设施 …

《Spring Framework实战》15:4.1.4.6.方法注入

欢迎观看《Spring Framework实战》视频教程 方法注入 在大多数应用场景中&#xff0c;容器中的大多数bean都是单例&#xff08;singletons&#xff09;的。当单例bean需要与另一个单例bean协作或非单例bean需与另一非单例bean协作时&#xff0c;通常通过将一个bean定义为另一个…

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch&#xff0c;而ROS2保留了XML 格式launch&#xff0c;还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好&#xff0c;但是ROS2官方推荐使用Python方式编写…

了解 Ansys Mechanical 中的网格方法:综合指南

网格是每个有限元分析 &#xff08;FEA&#xff09; 仿真的支柱。它将几何图形划分为离散单元&#xff0c;使 Ansys Mechanical 能够近似模型在各种条件下的行为。结构良好的网格可确保准确、可靠和计算高效的结果&#xff0c;而结构不佳的网格可能会导致错误、收敛问题或不必要…

学习threejs,使用TrackballControls相机控制器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.TrackballControls 相…

云集电商:数据库的分布式升级实践|OceanBase案例

电商行业对数据库有哪些需求 云集电商作为一家传统电商企业&#xff0c;业务涵盖了美妆个护、服饰、水果生鲜、健康保健等多个领域&#xff0c;在创立四年后在纳斯达克上市&#xff08;股票代码&#xff1a;YJ&#xff09;。与京东、淘宝、拼多多等电商平台不同&#xff0c;云…

智能租赁系统提升效率与服务质量的全新解决方案

内容概要 智能租赁系统的崛起就像一场春雨&#xff0c;滋润着租赁行业的每一个角落。它通过先进的技术架构&#xff0c;结合数据管理&#xff0c;优化了以往繁琐的租赁流程&#xff0c;让整个过程如同顺畅的流水。比如&#xff0c;通过智能算法自动计算费用&#xff0c;使得用…

苹果手机(IOS系统)出现安全延迟进行中如何关闭?

苹果手机&#xff08;IOS系统&#xff09;出现安全延迟进行中如何关闭&#xff1f; 一、设置二、隐私与安全性三、失窃设备保护关闭 一、设置 二、隐私与安全性 三、失窃设备保护关闭

VxWorks [安装workbench之修改虚拟机Mac]

问题&#xff1a; 一、安装VMware 下载链接 [VMware 15 pro](https://segmentfault.com/a/1190000022562275)二、修改VMnet1的Mac ** 打开注册表 ** ctrl f 搜索VMnet1 增加字符串值 NetWorkAddress 00D6196C32 三、重启VMnet1 修改完成 四、重启 workbench

Redis十大数据类型详解

Redis&#xff08;一&#xff09; 十大数据类型 redis字符串&#xff08;String&#xff09; string是redis最基本的类型&#xff0c;一个key对应一个value string类型是二进制安全的&#xff0c;意思是redis的string可以包含任何数据。例如说是jpg图片或者序列化对象 一个re…

【从零开始使用系列】StyleGAN2:开源图像生成网络——环境搭建与基础使用篇(附大量测试图)

StyleGAN2 是英伟达团队 NVIDIA 提出的生成对抗网络&#xff08;GAN&#xff09;的一种改进版本。 它通过创新的网络架构&#xff0c;能够生成细节丰富、逼真的图像&#xff0c;特别在高频细节&#xff08;如皮肤纹理、光照等&#xff09;的表现上表现卓越。与传统 GAN 相比&am…

【三维数域】三维数据调度-负载均衡和资源优化

在处理大规模三维数据时&#xff0c;负载均衡和资源优化是确保系统高效运行、提供流畅用户体验的关键。这两者不仅影响到系统的性能和稳定性&#xff0c;还直接决定了用户交互的质量。以下是关于如何在三维数据调度中实现有效的负载均衡和资源优化的详细探讨。 一、负载均衡 负…

成功案例分享 — 芯科科技助力涂鸦智能打造Matter over Thread模块,简化Matter设备开发

芯科科技&#xff08;Silicon Labs&#xff09;的愿景之一是让开发者每天都能够更轻松地开发无线物联网&#xff08;IoT&#xff09;。特别是在拥有相同愿景的合作伙伴的帮助下&#xff0c;我们每天都在取得进步。但是要想弥合知识水平和物联网开发之间的差距仍会面临一定的挑战…

如何将 sqlserver 数据迁移到 mysql

文章目录 前言一、导出SQL Server 数据二、转换数据格式为MySQL兼容格式三、导入数据到MySQL数据库五、使用ETL工具六、通过 navicat 工具七、总结 前言 将 SQL Server 数据迁移到 MySQL 是一个常见的数据库迁移任务&#xff0c;通常涉及以下几个关键步骤&#xff1a;导出 SQL…

10Hive性能优化

10Hive性能优化 1Hive性能问题排查的方式1.1Hive底层原理&#xff1a;explain执行计划详解1.1.1 explain理论1.1.2 实践 2Hive性能调优的方式2.1. SQL语句优化1. union all2. distinct 2.2. 数据格式优化2.3. 小文件过多优化2.3.1解决hive小文件过多问题小文件产生的原因小文件…