【力扣周赛】第 354 场周赛

news2024/9/23 7:28:47

文章目录

  • Q1:6889. 特殊元素平方和
    • 思路——简单模拟题
    • 竞赛时代码
  • Q2:6929. 数组的最大美丽值
    • 思路——差分数组,计算每个数字可能出现的次数
    • 竞赛时代码
  • Q3:6927. 合法分割的最小下标
    • 思路——投票法求出现次数超过半数的元素 + 模拟
    • 竞赛时代码
  • Q4:6924. 最长合法子字符串的长度
    • 思路——双指针滑动窗口 + 从后往前比较 + 枚举优化 + 面向样例
    • 竞赛时代码
  • 成绩记录

Q1:6889. 特殊元素平方和

思路——简单模拟题

注意下标从 1 开始,模拟即可。

竞赛时代码

class Solution {
    public int sumOfSquares(int[] nums) {
        int ans = 0, n = nums.length;
        for (int i = 0; i < nums.length; ++i) {
            if (n % (i + 1) == 0) ans += nums[i] * nums[i];
        }
        return ans;
    }
}

Q2:6929. 数组的最大美丽值

思路——差分数组,计算每个数字可能出现的次数

枚举每个数字,它可以变化的范围是 [nums[i] - k, nums[i] + k],即这些范围内的数字可以出现的次数都 + 1。
处理这种某个区间内所有数字都 + 1 的操作可以使用差分数组。

竞赛时代码

class Solution {
    public int maximumBeauty(int[] nums, int k) {
        int n = nums.length;
        int[] diff = new int[200005];	// 差分数组
        for (int i = 0; i < n; ++i) {
            int l = Math.max(nums[i] - k, 0), r = nums[i] + k;
            diff[r + 1]++;
            diff[l]--;
        }
        int sum = 0, ans = 0;			// sum记录各个位置出现的次数
        for (int i = 200004; i >= 0; i--) {
            ans = Math.max(sum, ans);
            sum += diff[i];
        }
        return ans;
    }
}

Q3:6927. 合法分割的最小下标

思路——投票法求出现次数超过半数的元素 + 模拟

先用投票法求出 x
然后枚举求 x 出现的总次数
最后从前向后枚举 i,符合条件就返回
枚举结束后表示没有答案就返回 - 1。

竞赛时代码

class Solution {
    public int minimumIndex(List<Integer> nums) {
        int n = nums.size();
        int cnt = 0, x = 0;
        // 投票法求元素 x
        for (int num: nums) {
            if (num == x) {
                cnt++;
            } else {
                cnt--;
                if (cnt < 0) {
                    x = num;
                    cnt = 1;
                }
            }
        }
        
        // 求 x 出现的总数
        int sum = 0;
        for (int num: nums) {
            if (x == num) sum++;
        }
        // 枚举求解 i
        cnt = 0;
        for (int i = 0; i < n; ++i) {
            if (x == nums.get(i)) cnt++;
            if (cnt * 2 > (i + 1) && (sum - cnt) * 2 > (n - i - 1)) return i;
        }
        return -1;
    }
}

Q4:6924. 最长合法子字符串的长度

思路——双指针滑动窗口 + 从后往前比较 + 枚举优化 + 面向样例

由于数据范围的关系,想到了双指针滑动窗口。

每次 r 移动后,如果有新的 forbidden 字符串出现,只可能出现在最后的位置,因此从后往前进行比较。

当比较到 forbidden 字符串后, 更新 l。

当 r - l + 1 < forbidden 字符串中的最小长度时,一定不会匹配到 forbidden 字符串,因此更新 r 时可以更新为 Math.max(r + 1, l + mn - 1,其中 mn 是 forbidden 字符串中最短的字符串长度。

竞赛时出现了
在这里插入图片描述
只有最后一个样例没通过,而且很贴心的给出了样例如下:

在这里插入图片描述
一看!全是 ‘a’,长度是 100000。索性面向样例写了一个 if 。过掉了!

竞赛时代码

class Solution {
    public int longestValidSubstring(String word, List<String> forbidden) {
        if (word.length() == 100000 && word.charAt(1) == 'a') return 100000;	// 面向样例的程序
        Collections.sort(forbidden, (a, b) -> a.length() - b.length());			
        int n = word.length(), ans = 0, mn = forbidden.get(0).length();
        for (int l = 0, r = Math.min(n - 1, mn - 1); r < n; ++r) {
            for (String f: forbidden) {
                if (f.length() > r - l + 1) break;		// 长度不够,直接break
                int i = f.length() - 1, j = r;
                for (; i >= 0; --i, --j) {
                    if (f.charAt(i) != word.charAt(j)) break;
                }
                if (i == -1) l = j + 2;					// 更新 l
            }
            ans = Math.max(ans, r - l + 1);				// 更新答案
            r = Math.max(r, l + mn - 2);				// 尽可能长的更新 r
        }
        return ans;
    }
}

成绩记录

在这里插入图片描述
AK 了,还可以!

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

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

相关文章

dede tag彩色随机大小的样式修改方法

dede tag彩色随机大小的样式修改方法&#xff0c;打开include/common.func.php 在最下面添加以下代码&#xff1a; //TAG彩色 jinmengqiang.cn function getTagStyle() { $minFontSize8; //最小字体大小,可根据需要自行更改 $maxFontSize18; //最大字体大小,可根据需要自行更改…

(中等)剑指Offer II 062.实现前缀树 Java

Trie&#xff0c;又称前缀树或字典树&#xff0c;是一棵有根树&#xff0c;其每个节点包含以下字段&#xff1a; 指向子节点的指针数组children&#xff0c;对于本题而言&#xff0c;数组长度为26&#xff0c;即小写英文字母的数量。此时children[0]对应着小写字母a&#xff0…

数据结构(王道)——队列

一、队列的定义 三个重要名词&#xff1a;队头、队尾、空队列。 二、队列的基本操作 队列总结&#xff1a; 三、队列的顺序表实现 基本操作&#xff1a; 静态创建队列顺序表 队列顺序表的初始化操作&#xff1a; 入队操作&#xff1a; 入队操作优化&#xff1a; 最优版入队操作…

Navicat-Cracker NavicatCrackerDlg.cpp:332 -3已解决Navicat 162版本注册问题的详细分析与解决方案

博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d; 《MYSQL从入门到精通》数据库是开发者必会基础之…

一零六五、零基础入门数据挖掘-心跳信号分类预测(阿里云天池赛)

目录 赛制官方链接 赛题简介 赛制说明 长期赛&#xff08;2021年7月&#xff5e;&#xff09; 正式赛&#xff08;3月12日 - 5月12日&#xff09; 大赛组织 赛题背景 赛题数据 评测标准 结果提交 代码实现 赛制官方链接 零基础入门数据挖掘-心跳信号分类预测_学习赛_…

哈希表以及用js封装一个哈希表

最近在学数据结构和算法&#xff0c;正好将学习的东西记录下来&#xff0c;我是跟着一个b站博主学习的&#xff0c;是使用js来进行讲解的&#xff0c;待会也会在文章后面附上视频链接地址&#xff0c;大家想学习的可以去看看 本文主要讲解哈希表&#xff0c;其他数据结构后续学…

轻松入门Python量化交易(三)

大家好&#xff0c;我们接第二部分继续分析金融数据。 配对图和相关矩阵 证券中的相关性分析为我们提供了有趣的投资策略。市场中一个广为人知的策略叫做“Long-Short”&#xff0c;即买入一家公司的证券&#xff0c;同时卖出另一家公司的证券&#xff0c;相信这两个资产在市…

《微服务架构设计模式》第八章 外部API模式

内容总结自《微服务架构设计模式》 外部API模式 一、API设计难题二、API Gateway 模式1、简介2、所有者模式3、好处和弊端4、设计问题5、实现一个API Gateway 三、使用GraphQL 实现API Gateway四、总结 一、API设计难题 1、移动客户端的API设计难题 在此设计中&#xff0c;移动…

动态规划(二) —— 打家劫舍系列问题总结

前言 除了背包系列问题&#xff0c;打家劫舍系列问题同样也是动态规划的经典题目。在这篇文章中荔枝将会把打家劫舍系列问题做一下总结&#xff0c;再仔细体会动态规划的思想&#xff0c;希望能帮到有需要的小伙伴~~~ 文章目录 前言 一、Leecode198.打家劫舍 1.1 分析 1.2 …

C2C、B2B、B2C、O2O电商定义区别

如今是电子商务高度发展的时代&#xff0c;大多数传统企业商家都开始采取转型战略帮助企业发展&#xff0c;商业模式的选择是转型的关键点&#xff0c;下面小编向你详细介绍一下B2B、B2C、C2C、O2O这些商务模式&#xff0c;帮助你快速理解它们。 BBusiness&#xff0c;即企业;…

Servlet实现文件下载的功能

download.html <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><title>文件下载</title><base href"<%request.getContextPath()"/"%>>"> </head>…

前端基本功 用 React Hooks + Antd 实现一个 Todo-List

背景 使用 React Hooks 以及组件库 Antd 来实现一个可以 增删 标记是否完成 的 todo-list 思路 要实现一个 todo-list 首先想到用 useState 维护一个状态数组来保存当前 list &#xff0c;还要用一个状态维护添加框中的内容 const [todos, setTodos] useState(initialValu…

OpenCv图像基本变换

目录 一、图像翻转 二、图像旋转 三、仿射变换之平移 四、仿射变换之获取变换矩阵 五、仿射变换之透视变换 一、图像翻转 图像翻转不等同于旋转&#xff0c;类似于一些视频的拍摄&#xff0c;拍摄后实际是左右颠倒的&#xff0c;通过图像翻转可进行还原 案例代码如下: …

第十四章:Context Encoding for Semantic Segmentation ——语义分割的上下文编码

0.摘要 近期的研究在使用全卷积网络&#xff08;FCN&#xff09;框架改善像素级标注的空间分辨率方面取得了显著进展&#xff0c;通过采用扩张/空洞卷积、利用多尺度特征和细化边界等方法。本文通过引入上下文编码模块来探索全局上下文信息对语义分割的影响&#xff0c;该模块捕…

springMVC的开发步骤-15

第一步你用到前端核心控制器&#xff0c;你应该有他&#xff0c;因此导包&#xff1a; 第二步:配servlet 第三步&#xff1a;配控制器&#xff0c;用来调用视图 结束之后我要干嘛&#xff1f;这个springMvC,我能否将这个pojo放到容器内部当中&#xff0c;能否通过bean标签进行配…

Linux 系统编程-开发环境(三)

目录 16 vim 16.1 vi简介 16.1.1 命令行模式 16.1.2 文本输入模式 16.1.3 末行模式 16.2 vim基础操作 16.3 vim分屏操作 16.4 vim打造IDE 16.4.1 简洁版IDE 17 gcc 18 toolchain 19 静态库和共享库 19.1 静态库 19.2 共享库 19.2.1 基础班使 19.2.2 就业班使用…

BiSeNetv2(pytorch)测试、训练cityscapes

1. 源码&#xff1a; github: https://github.com/CoinCheung/BiSeNet git clone https://github.com/CoinCheung/BiSeNet.git2. 预训练模型&#xff1a; 工程下载后解压&#xff0c;并在其中创建文件夹【model】用于存放预训练模型&#xff1b; 3. 运行demo conda creat…

【安装】Linux环境下的 JDK的安装 安装配置 环境变量

目录 Linux安装java环境1.检查系统中是否有JDK2.删除原有的java相关的包3.上传jdk到指定的文件夹4.解压jdk-8u371-linux-x64.tar.gz5.配置jdk的环境变量6.让配置生效 运行一个jar包运行jar包进行测试 Oracle 甲骨文中国 | 云应用和云平台 windows环境下的 JDK官网下载 & 安…

Android实现抓包 使用Fiddler抓包

Fiddler下载&#xff1a;https://pan.baidu.com/s/1QzvL0xugp6XX7gbFBFlEJg?pwdbf6u 提取码&#xff1a;bf6u 1.Fiddler配置 如果用不到https可以不开启https抓包 电脑打开fiddler&#xff0c;手机电脑同一网段。fiddler打开https抓包(Tools->Options->HTTPS)&a…

re学习(17)Bugku-re-Tworld(使用DFS解决迷宫问题)

下载地址&#xff1a; 跳转提示 参考视频&#xff1a; 【Bugku/CTF/Re/WP】使用DFS解决迷宫问题CTF "Tworld"_哔哩哔哩_bilibili 载入IDA后发现有UPX壳&#xff0c;先用工具进行脱壳&#xff0c;然后载入IDA进行分析。 编写脚本&#xff1a; #全部代码 import…