Leetcode - 周赛399

目录

一,3162. 优质数对的总数 I

二,3163. 压缩字符串 III

三,3164. 优质数对的总数 II

四, 3165. 不包含相邻元素的子序列的最大和


一,3162. 优质数对的总数 I

假设 x 是 nums1 数组中的值,y 是 nums2 数组中值,我们要求的就是有几个 (x,y) 满足

x % (y * k) == 0,可以直接暴力 

代码如下:

class Solution {public int numberOfPairs(int[] nums1, int[] nums2, int k) {int ans = 0;for(int x : nums1){for(int y : nums2){if(x%(y*k)==0) ans++;}}return ans;}
}

二,3163. 压缩字符串 III

本题是一道模拟题,遍历word字符串,将相邻且字符相同的子字符串,写成数字+字符的形式,比如 "aaabbc",写成 "3a2b1c",注意,数字最大是9,也就是说如果遇到比如12个连续的'a',我们要写成 "9a3a"。

代码如下: 

class Solution {public String compressedString(String word) {int cnt = 1;char[] ch = word.toCharArray();StringBuilder res = new StringBuilder();for(int i=1; i<ch.length; i++){if(ch[i] == ch[i-1] && cnt < 9){cnt++;}else{res.append(cnt);res.append(ch[i-1]);cnt = 1;}}if(cnt > 0){res.append(cnt);res.append(ch[ch.length-1]);} return res.toString();}
}

三,3164. 优质数对的总数 II

1. 预处理被除数:

  • 要求满足 x % (y * k) == 0 的数对(x,y),可以先枚举nums1数组,使用哈希表统计出 x / k 的所有因子及其对应的数量,再枚举 nums2 数组,看 y 是否是x/k的因子(即是否在哈希表中),如果存在,加上对应的值。最终得出答案

2.预处理除数

  • 除了上述做法,我们还可以先枚举nums1数组,使用哈希表统计出 x / k 及其对应的数量,枚举nums2数组,枚举 y 的倍数及其数量,看是否在哈希表中,如果存在,加上对应的值。最终得出答案

代码如下:

class Solution {//预处理被除数xpublic long numberOfPairs(int[] nums1, int[] nums2, int k) {Map<Integer, Integer> map = new HashMap<>();for(int x : nums1){//统计 <x/k 的因子, 对应的数量>if(x%k == 0){for(int i=1; i<=Math.sqrt(x/k); i++){if(x/k%i == 0){map.merge(i, 1, Integer::sum);if(i < x/k/i)map.merge(x/k/i, 1, Integer::sum);}}}}long ans = 0;for(int y : nums2){ans += map.getOrDefault(y, 0);}return ans;}
}class Solution {//预处理除数ypublic long numberOfPairs(int[] nums1, int[] nums2, int k) {//O(n+m+(mx/k)logm)Map<Integer, Integer> map1 = new HashMap<>();long mx = 0;for(int x : nums1){//统计 <x/k,x/k的数量>if(x%k == 0){map1.merge(x/k, 1, Integer::sum);mx = Math.max(mx, x/k);}}Map<Integer, Integer> map2 = new HashMap<>();for(int y : nums2){map2.merge(y, 1, Integer::sum);}long ans = 0;for(int y : map2.keySet()){ int s = 0;for(int j=y; j<=mx; j+=y){//枚举 y 的倍数s += map1.getOrDefault(j, 0);}ans += (long) s * map2.get(y);}return ans;}
}

四, 3165. 不包含相邻元素的子序列的最大和

本题一看就是一道标准的打家劫舍问题,直接上代码:

class Solution {public int maximumSumSubsequence(int[] nums, int[][] queries) {int MOD = (int)1e9 + 7;int n = nums.length;int[] f = new int[n];int ans = 0;for(int[] q : queries){nums[q[0]] = q[1];f[0] = Math.max(0, nums[0]);for(int i=1; i<n; i++){f[i] = Math.max(f[i-1], (i>1?f[i-2]:0)+nums[i]);}System.out.println(f[n-1]);ans = (ans+f[n-1])%MOD;}return ans;}
}

但是上述做法会超时,需要换一种做法,这题实际上需要使用线段树动态维护[0,n-1]的最大值,就是将 [l,r] = [l,mid] + [mid+1,r],不断的分治,但是由于题目要求不包含相邻元素,也就是说mid 和 mid+1这两个点最多只能取一个,而只靠一维数组无法维护,所以需要一个二维数组f[n][4],这里先用f00,f01,f10,f11表示一下它们的状态:

  • f00:表示[l,r]l,r都不选的合法最大值
  • f01:表示[l,r]l不选的合法最大值(r可选可不选)
  • f10:表示[l,r]r不选的合法最大值(l可选可不选)
  • f11:表示[l,r]都可以选的合法最大值(l,r可选可不选)

它们之间的递推关系:

  • f00 = max(f01+f00, f00+f10)
  • f01 = max(f00+f11, f01+f01)
  • f10 = max(f10+f10, f11+f00)
  • f11 = max(f10+f11, f11+f01)

画个图来理解一下:

剩下的基本都是线段树基本方法,没什么变化,代码如下:

class Solution {//f00:表示[l,r]l,r都不选的合法最大值//f01:表示[l,r]l不选的合法最大值(r可选可不选)//f10:表示[l,r]r不选的合法最大值(l可选可不选)//f11:表示[l,r]都可以选的合法最大值(l,r可选可不选)//[l, r] = [l, mid] + [mid+1, r]// 00 01 10 11//f00 = max(f01+f00, f00+f10)//f01 = max(f00+f11, f01+f01)//f10 = max(f10+f10, f11+f00)//f11 = max(f10+f11, f11+f01)int[][] f;int[] a;void maintain(int i){f[i][0] = Math.max(f[i<<1][1]+f[i<<1|1][0], f[i<<1][0]+f[i<<1|1][2]);f[i][1] = Math.max(f[i<<1][0]+f[i<<1|1][3], f[i<<1][1]+f[i<<1|1][1]);f[i][2] = Math.max(f[i<<1][2]+f[i<<1|1][2], f[i<<1][3]+f[i<<1|1][0]);f[i][3] = Math.max(f[i<<1][2]+f[i<<1|1][3], f[i<<1][3]+f[i<<1|1][1]);}void build(int l, int r, int i){if(l == r){f[i][3] = Math.max(0, a[l]);}else{int mid = (l + r) / 2;build(l, mid, i<<1);build(mid+1, r, i<<1|1);maintain(i);}}void update(int l, int r, int i, int R, int val){if(l == r){f[i][3] = Math.max(0, val);return;} int mid = (l + r) / 2;if(R <= mid){update(l, mid, i<<1, R, val);}else{update(mid+1, r, i<<1|1, R, val);}maintain(i);}int query(int l, int r, int i){return f[i][3];}public int maximumSumSubsequence(int[] nums, int[][] queries) {int MOD = (int)1e9 + 7;int n = nums.length;f = new int[n<<2][4];a = nums;build(0, n-1, 1);int ans = 0;for(int[] q : queries){update(0, n-1, 1, q[0], q[1]);ans = (ans + query(0, n-1, 1))%MOD;}return ans%MOD;}
}

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

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

相关文章

大模型微调常见方法

0&#xff0c; prefix tuning prefix-tuning 跟 soft prompt tuning 类似&#xff0c;只不过&#xff0c;soft prompt tuning 仅仅针对 transformer模型的输入进行&#xff0c;而prefixt-tuning 是针对 每一个 transformer block进行 soft prompt tuning 跟 hard prompt tunin…

c++ string模拟实现

模拟实现string类&#xff0c;里面包含四个成员变量&#xff0c;第一个是指向字符数组的指针&#xff0c;第二个变量是目前存放了多少个字符&#xff0c;第三个变量为这个字符数组的容量的大小。最后一个为静态成员变量npos。 注意&#xff1a;一个const 修饰的整型&#xff0…

项目更换服务器时间少8小时

时区错误 输入 date 查看当前的linux系统时间 hwclock --show 查看当前linux硬件时间 如果发现系统时间和硬件时间不同步&#xff0c;而且硬件时间是正确的&#xff0c;可以用以下命令&#xff1a;hwclock --hctosys 把硬件时间同步到系统时间 mysql时区错误可以参考这位大…

云服务器重启后无法访问phpMyAdmin的解决方案

一、背景 我在解决另一问题的时候&#xff0c;重启了云服务器。当我想再次访问phpMyAdmin时&#xff0c;出现了如下报错。 HTTPConnectionPool(host127.0.0.1, port888): Max retries exceeded with url: /phpmyadmin_609a02b02423214c/index.php?langzh_cn (Caused by Ne…

嵌入式知识学习分享~~

欢迎关注小徐的个人微信公众号&#xff0c;感觉微信的文章排版不错&#xff0c;后续会继续分享一些新的学习记录以及和大家共同进步~

基于广义极大极小凹惩罚的心电信号降噪方法(MATLAB R2021B)

凸优化是数学最优化的一个子领域&#xff0c;研究定义于凸集中的凸函数最小化问题。由于心电信号降噪的过程可以理解为求信号的稀疏近似解&#xff0c;因此基于凸优化和稀疏性表达的去噪方法可用于心电信号处理。在凸优化的数学模型中&#xff0c;惩罚项的选取对最终结果会产生…

如何在测试/线上环境页面访问本地接口?

文章目录 一、前言二、分析三、搭建1、搭建nginx&#xff0c;监听http请求转发2、监听https请求转发 四、总结 一、前言 在工作中&#xff0c;开发完的接口&#xff0c;一般测试的话&#xff0c;基本是使用Postman&#xff0c;如果要到页面测试&#xff0c;就要发版进行测试&a…

年中汇报季?——一文教会你如何进行数据分析

一、常见的数据分析报告类型 数据分析报告通常可以分为三类&#xff1a;日常分析报告、专题型分析报告和综合性分析报告。前两者是以数据结论建议的格式去撰写&#xff0c;综合性分析报告则是&#xff1a;行业环境调研&#xff08;竞品类产品数据分析&#xff09;自身产品数据…

Java:使用Opencv进行大图找小图

本文将介绍使用Java操作Opencv进行行大图找小图测试&#xff01; 1、OpenCV简介 OpenCV是一个开源计算机视觉库&#xff0c;提供了丰富的图像处理和计算机规觉算法。它支持多种编程语言&#xff0c;包括Java本文将介绍如何在Java中使用OpenCV进行图像处理和计算机视觉任务。 …

自然语言处理(NLP)—— 信息提取与文档分类

1. 初识信息提取 1.1 信息提取的基本知识 1.1.1 信息提取的概念 信息提取&#xff08;IE, Information Extraction&#xff09;是自然语言处理&#xff08;NLP&#xff09;领域的一个重要分支&#xff0c;它专注于从文档或语料库中提取结构化信息。这与信息检索&#xff08;I…

RabbitMQ怎么保证可靠性

RabbitMQ怎么保证可靠性 前言生产端问题解决方案代码验证 RabbitMQ问题消费端问题解决方案代码验证 总结 前言 RabbitMQ相信大家都非常熟悉了&#xff0c;今天咱们来聊聊怎么保证RabbitMQ的可靠性。 那什么时候会出现问题呢&#xff1f; 第一种是生产端出现的问题。我们向队…

MySQL-事务日志

事务的隔离性由 锁机制 实现 事务的原子性、一致性、隔离性 由事务的 redo日志 和 undo 日志来保证 redo log 称为 重做日志&#xff0c;提供再写入操作&#xff0c;恢复提交事务修改的页操作&#xff0c;用来保证事务的持久性。undo log 称为 回滚日志&#xff0c;回滚行记录…

selenium自动化介绍

文章目录 一、selenium原理 安装二、selenium使用1.创建浏览器对象&#xff0c;访问网址2.消除警告提示3.不显示浏览器中受控制字样4.防检测5.设置延时5.1强制延时5.2隐式延时 6.设置浏览器窗口大小 三、案例实战&#xff1a;百度搜索四、iframe标签五、案例实战&#xff1a;Q…

第一周 数据结构与算法以及复杂度分析

数据结构与算法 算法定义 算法&#xff08;algorithm&#xff09;是在有限时间内解决特定问题的一组指令或操作步骤&#xff0c;它具有以下特性。 1.问题是明确的&#xff0c;包含清晰的输入和输出定义。 2.具有可行性&#xff0c;能够在有限步骤、时间和内存空间下完成。 3.…

【第五节】C++的多态性与虚函数

目录 前言 一、子类型 二、静态联编和动态联编 三、虚函数 四、纯虚函数和抽象类 五、虚析构函数 六、重载&#xff0c;重定义与重写的异同 前言 面向对象程序设计语言的三大核心特性是封装性、继承性和多态性。封装性奠定了基础&#xff0c;继承性是实现代码重用和扩展…

Linux内网中安装jdk1.8详细教程

本章教程,主要介绍如何在内网环境中配置JDK1.8环境变量 一、下载Linux版压缩包 下载地址:https://www.oracle.com/java/technologies/downloads/#java8 下载完成之后,通过XFTP等工具,将安装包上传到内网服务器 二、安装配置步骤 1、解压压缩包 tar -zxvf /usr/local/jdk-…

根据PDF模版填充数据并生成新的PDF

准备模版 使用 福昕高级PDF编辑器 &#xff08;本人用的这个&#xff0c;其他的也行&#xff0c;能作模版就行&#xff09;打开PDF文件点击 表单 选项&#xff0c;点击 文本域在需要填充数据的位置设计文本域设置 名称、提示名称相当于 属性名&#xff0c;提示就是提示&#x…

基于SSM的“基于Apriori算法的网络书城”的设计与实现(源码+数据库+文档)

基于SSM的“基于Apriori算法的网络书城”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 网站功能展示图 首页 商品分类 热销 新品 我的订单 个…

二位偏序,P3660 [USACO17FEB] Why Did the Cow Cross the Road III G

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 P3660 [USACO17FEB] Why Did the Cow Cross the Road III G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 二、解题报告 1、思路分析 二维偏序问题 我们将坐标按照第一维排序 然后树状数组维护区间内的…

【深度学习】【STWave】时空图预测,车流量预测,Efficient Spectral Graph Attention Network

Spatio-Temporal meets Wavelet: Disentangled Traffic Flow Forecasting via Efficient Spectral Graph Attention Network 代码&#xff1a;https://github.com/LMissher/STWave 论文&#xff1a;https://arxiv.org/abs/2112.02740 帮助&#xff1a; https://docs.qq.com/s…