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 {
    //预处理被除数x
    public 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 {
    //预处理除数y
    public 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;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker部署SiYuan笔记-Unraid

使用unraid的docker部署SiYuan笔记&#xff0c;简单记录 笔记说明 Siyuan笔记是一款基于markdown语法的笔记工具&#xff0c;具有活跃的社区和多设备支持。大部分功能都是免费&#xff0c;源代码开源&#xff0c;支持插件安装&#xff0c;具有很不错的使用体验。 Docker地址&a…

【应用层】 DNS 域名协议解析

文章目录 DNS(Domain Name System)出现及演化 ⏳DNS 概括&#x1f50d;DNS定义DNS 作用 DNS工作原理⚙️域名解析DNS解析的详细工作流程 DNS域名解析方式&#x1f504;静态DNS域名解析动态DNS域名解析 DNS域名解析过程的深入分析 &#x1f9d0;递归查询迭代查询 公共DNS服务器的…

Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明

Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明 目录 Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明…

AI帮写:探索国内AI写作工具的创新与实用性

随着AI技术的快速发展&#xff0c;AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头&#xff0c;国内很多小伙伴往往望而却步&#xff0c;究其原因&#xff0c;就是它的使用门槛高&#xff0c;还有成本的考量。 不过&#xff0c;随着GPT技术的火热&#xff0c;国内也涌…

Keras深度学习框架实战(3):EfficientNet实现stanford dog分类

1、通过EfficientNet进行微调以实现图像分类概述 通过EfficientNet进行微调以实现图像分类&#xff0c;是一个使用EfficientNet作为预训练模型&#xff0c;并通过微调&#xff08;fine-tuning&#xff09;来适应特定图像分类任务的过程。一下是对相关重要术语的解释。 Effici…

【气象常用】剖面图

效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;我用的era5的散度数据&#xff08;大家替换为自己的就好啦&#xff0c;era5数据下载方法可以看这里【数据下载】ERA5 各高度层月平均数据下载_era5月平均数据-CSDN博客&#xff09; 2. 数据处理&#xff1a…

高考试卷押运车视频监控解决方案

一、引言 高考作为我国教育领域的重要事件&#xff0c;其公正、公平和安全性一直备受社会关注。试卷押运作为高考的重要环节&#xff0c;其安全性直接关系到高考的顺利进行和考生的切身利益。因此&#xff0c;对高考试卷押运车实施视频监控解决方案&#xff0c;对于确保试卷安…

【Pr学习】01新建项目起步

【Pr学习】01新建项目起步 1、新建项目2.序列设置2.1新建序列2.2序列参数讲解2.3自定义设置 3.PR窗口认识3.1 项目窗口3.2 源窗口2.4 保存面板 4.剪辑导入4.1 素材导入4.2 视图切换4.3 时间轴4.4轨道工具4.5 节目窗口素材导入 5.基础操作5.1 取消视频音频链接5.2 单独渲染&…

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0)

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0) Install macOS on unsupported Macs 请访问原文链接&#xff1a;https://sysin.org/blog/install-macos-on-unsupported-mac/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

Hugging Face称检测到对其人工智能模型托管平台的“未经授权访问“

周五下午晚些时候&#xff0c;人工智能初创公司Hugging Face表示&#xff0c;其安全团队在本周早些时候检测到对Spaces的"未经授权访问"&#xff0c;Spaces是Hugging Face用于创建、共享和托管人工智能模型和资源的平台。 Hugging Face 在一篇博文中说&#xff0c;这…

intel深度相机D455的使用

一、D455介绍 Intel RealSense D455 是RealSense D400系列的一部分&#xff0c;这个系列的设备以其高精度和可靠性而闻名。D455相比于之前的型号&#xff08;如D415和D435&#xff09;&#xff0c;提供了更远的感知范围和更高的精度。 二、使用代码 我们先定义一下相关的函数…

深入理解Java中的List集合:解析实例、优化技巧与最佳实践

一&#xff1a;List 集合的基础 1.1 什么是 List 集合&#xff1f; List 集合是 Java 集合框架中的一种有序、可重复的数据结构&#xff0c;它继承自Collection 接口&#xff0c;允许存储多个元素。 与数组不同&#xff0c;List 集合的大小是动态可变的&#xff0c;可以根据…

Elasticsearch:基于多个 kNN 字段对文档进行评分

作者&#xff1a;来自 Elastic Madhusudhan Konda 通过具有多个 kNN 字段的最接近的文档对文档进行评分 Elasticsearch 不仅仅是一个词法&#xff08;文本&#xff09;搜索引擎。 Elasticsearch 是多功能搜索引擎&#xff0c;除了传统的文本匹配之外&#xff0c;还支持 k 最近…

海外高清短视频:四川京之华锦信息技术公司

海外高清短视频&#xff1a;探索世界的新窗口 在数字化时代的浪潮下&#xff0c;海外高清短视频成为了人们探索世界、了解异国风情的新窗口。四川京之华锦信息技术公司这些短视频以其独特的视角、丰富的内容和高清的画质&#xff0c;吸引了无数观众的目光&#xff0c;让人们足…

DI-engine强化学习入门(一)使用强化学习模型控制月球着陆器

控制程序观前提醒&#xff1a;本章内容为训练一个强化学习模型&#xff0c;并使用强化学习模型控制月球着陆器。安装和运行DI-engine示例。 什么是DI-engine? DI-engine 是一个由 OpenDILab 提供的开源强化学习&#xff08;Reinforcement Learning&#xff0c;简称RL&#xf…

一次职业院校漏洞挖掘

这个是之前挖掘到的漏洞&#xff0c;目前网站进行重构做了全新的改版&#xff0c;但是这个漏洞特别经典&#xff0c;拿出来进行分享。看到src上面的很多敏感信息泄露&#xff0c;所以自己也想找一个敏感信息泄露&#xff0c;官网如图&#xff1a; 发现在下面有一个数字校园入口…

电源滤波器怎么选用

电源滤波器怎么选用 滤波器应用场景及作用第一步&#xff1a;第二步&#xff1a;第三步&#xff1a;第四步&#xff1a; 滤波器应用场景及作用 可以有效解决EMC测试无法通过、端口防护、滤除干扰、设备保护等问题 主要功能有: 1、降低主电源谐波; 2、保护驱动装置电力电子元件…

硬币检测电路设计

一、来源&#xff1a;凡亿教育 第一场&#xff1a;硬币检测装置原理分析、电路设计以及器件选型_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Zh4y1V7Px/?p1&vd_source43eb1cb50ad3175d7f3b9385905cd88f 二、开发软件&#xff1a;KEIL MDK 三、主控芯片&#…

大型制造业集团IT信息化总体规划方案(65页PPT)

方案介绍&#xff1a; 本大型制造业集团IT信息化总体规划方案旨在通过构建先进、高效、稳定的IT信息化系统&#xff0c;支撑集团各业务领域的运营和管理需求&#xff0c;促进集团整体运营效率和竞争力的提升。通过实施本项目&#xff0c;集团将能够更好地应对市场变化和客户需…

嫁接打印:经济与实用的完美结合

在制造领域&#xff0c;寻求经济且好用的技术方案至关重要。而在模具制造中&#xff0c;3D 打印随形水路在提升冷却效率和产品良率方面的卓越表现已得到广泛认同。如何更经济的应用3D打印技术&#xff0c;就不得不说嫁接打印了。 在嫁接打印的制造过程中&#xff0c;产品的一部…