Leetcode 第 408 场周赛题解

Leetcode 第 408 场周赛题解

  • Leetcode 第 408 场周赛题解
    • 题目1:3232. 判断是否可以赢得数字游戏
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:3233. 统计不是特殊数字的数字数量
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:3234. 统计 1 显著的字符串的数量
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:3235. 判断矩形的两个角落是否可达
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 408 场周赛题解

题目1:3232. 判断是否可以赢得数字游戏

思路

用一个 sum1 统计个位数的和,sum2 统计十位数的和。

只要 sum1 和 sum2 不相等,Alice 拿大的就能赢得这场游戏。

代码

/** @lc app=leetcode.cn id=3232 lang=cpp** [3232] 判断是否可以赢得数字游戏*/// @lc code=start
class Solution
{
public:bool canAliceWin(vector<int> &nums){int sum1 = 0, sum2 = 0;for (int &num : nums){if (num / 10)sum2 += num;elsesum1 += num;}return sum1 != sum2;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。

题目2:3233. 统计不是特殊数字的数字数量

思路

埃式筛 + 计数

正难则反,统计区间 [l,r] 内有多少个特殊数字。

这等价于区间 [0, r] 内的特殊数字个数,减去区间 [0, l−1] 内的特殊数字个数。

代码

/** @lc app=leetcode.cn id=3233 lang=cpp** [3233] 统计不是特殊数字的数字数量*/// @lc code=start
const int MX = 31622; // floor(sqrt(10^9))
bool inited = false;
vector<int> pi(MX + 5, 0);// 埃氏筛 O(Mlog(logM))
void init()
{if (inited)return;for (int i = 2; i <= MX; i++){if (pi[i] == 0){ // i 没有被标记,i 是质数pi[i] = pi[i - 1] + 1;for (int j = i * i; j <= MX; j += i){ // 标记 i 的倍数为合数pi[j] = -1;}}else{pi[i] = pi[i - 1];}}inited = true;
}class Solution
{
public:int nonSpecialCount(int l, int r){init();return r - l + 1 - (pi[(int)sqrt(r)] - pi[(int)sqrt(l - 1)]);}
};// @lc code=end

复杂度分析

时间复杂度:O(1)。不计入预处理的时间。

空间复杂度:O(1)。不计入预处理的空间。

题目3:3234. 统计 1 显著的字符串的数量

思路

注意到,如果子串中的 0 非常多,多到 0 的个数的平方比 1 的个数都要大,那么这样的子串必然不是 1 显著子串。

设 cnt0 为子串中的 0 的个数,cnt1 为子串中的 1 的个数,那么必须满足:cnt0 * cnt0 <= cnt1 <= n,所以子串中的 0 的个数不会超过 sqrt(n)。

在这里插入图片描述

代码

/** @lc app=leetcode.cn id=3234 lang=cpp** [3234] 统计 1 显著的字符串的数量*/// @lc code=start
class Solution
{
public:int numberOfSubstrings(string s){int n = s.length();vector<int> a;for (int i = 0; i < n; i++)if (s[i] == '0')a.push_back(i);int tot1 = n - a.size();a.push_back(n); // 哨兵int ans = 0, i = 0; // >= left 的第一个 0 的下标是 a[i]// 枚举子串左端点for (int left = 0; left < n; left++){ // 枚举子串有多少个 0// 枚举 0 的下标for (int k = i; k < a.size() - 1; k++){int cnt0 = k - i + 1;if (cnt0 * cnt0 > tot1)break;int p = a[k], q = a[k + 1];int cnt1 = a[k] - left - (k - i);if (cnt1 >= cnt0 * cnt0){// p, p+1, ..., q-1 都可以作为子串的右端点ans += q - p;}else{// cnt1 的个数少,补充 cnt0 * cnt0 - cnt1 个ans += max(q - p - (cnt0 * cnt0 - cnt1), 0);}}// 没有 0 的情况if (s[left] == '0'){i++; // 这个 0 后面不会再枚举到了}else{ans += a[i] - left; // 不含 0 的子串个数tot1--;}}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n * sqrt(n)),其中 n 是字符串 s 的长度。

空间复杂度:O(n),其中 n 是字符串 s 的长度。

题目4:3235. 判断矩形的两个角落是否可达

思路

如果从矩形【上边界/左边界】到矩形【右边界/下边界】的路被圆堵死,则无法从矩形左下角移动到矩形右上角。

怎么判断呢?

首先考虑圆心都在矩形内部的情况。如果圆和圆相交或相切,则相当于在两个圆之间架起了一座桥。如果圆和矩形边界相交或相切,则相当于在矩形边界和圆之间架起了一座桥。如果可以从矩形【上边界/左边界】通过桥到达矩形【右边界/下边界】,则说明路被堵死,无法从矩形左下角移动到矩形右上角。

也可以把桥理解成切割线,如果能把从矩形左下角到矩形右上角的路径切断,则无法从矩形左下角移动到矩形右上角。

用图论的术语来说,就是把圆抽象成节点,在相交或相切的节点之间连边,得到一张无向图。如果从与【上边界/左边界】相交的节点出发,DFS 这张图,到达与【右边界/下边界】相交的节点,则说明无法从矩形左下角移动到矩形右上角。

从与矩形【上边界/左边界】相交/相切的圆开始 DFS。

如果当前 DFS 到了圆 i:

先判断其是否与矩形【右边界/下边界】相交或相切,如果是,则 DFS 返回 true。
否则,判断其是否与其他圆 j 相交或相切,如果是,则判断点 A 是否严格在矩形内,如果在,则递归 j,如果收到了 true,则 DFS 返回 true。
最后,如果最外层调用 DFS 的地方收到了 true,则表示无法从矩形左下角移动到矩形右上角,返回 false。

代码实现时,可以在递归之前,特判圆包含矩形左下角或者矩形右上角的情况,此时可以直接返回 false。

代码

/** @lc app=leetcode.cn id=3235 lang=cpp** [3235] 判断矩形的两个角落是否可达*/// @lc code=start
class Solution
{// 判断点 (x, y) 是否在圆 (ox, oy, r) 内bool in_circle(long long ox, long long oy, long long r, long long x, long long y){return (ox - x) * (ox - x) + (oy - y) * (oy - y) <= r * r;}public:bool canReachCorner(int X, int Y, vector<vector<int>> &circles){int n = circles.size();vector<int> vis(n);auto dfs = [&](auto &&dfs, int i) -> bool{long long x1 = circles[i][0], y1 = circles[i][1], r1 = circles[i][2];// 圆 i 是否与矩形右边界/下边界相交相切if (y1 <= Y && abs(x1 - X) <= r1 ||x1 <= X && y1 <= r1 ||x1 > X && in_circle(x1, y1, r1, X, 0)){return true;}vis[i] = true;for (int j = 0; j < n; j++){long long x2 = circles[j][0], y2 = circles[j][1], r2 = circles[j][2];// 在两圆相交相切的前提下,点 A 是否严格在矩形内if (!vis[j] && (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) <= (r1 + r2) * (r1 + r2) &&x1 * r2 + x2 * r1 < (r1 + r2) * X &&y1 * r2 + y2 * r1 < (r1 + r2) * Y &&dfs(dfs, j)){return true;}}return false;};for (int i = 0; i < n; i++){long long x = circles[i][0], y = circles[i][1], r = circles[i][2];if (in_circle(x, y, r, 0, 0) || // 圆 i 包含矩形左下角in_circle(x, y, r, X, Y) || // 圆 i 包含矩形右上角// 圆 i 是否与矩形上边界/左边界相交相切!vis[i] && (x <= X && abs(y - Y) <= r || y <= Y && x <= r || y > Y && in_circle(x, y, r, 0, Y)) && dfs(dfs, i)){return false;}}return true;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n2),其中 n 是数组 circles 的长度。

空间复杂度:O(n),其中 n 是数组 circles 的长度。

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

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

相关文章

矮草坪渲染尝试

本来说写unity里的&#xff0c;由于three测试方便&#xff0c;先试试three 这个图片是目标效果 可以看见草很矮&#xff0c;很密集&#xff0c;如果用instance来绘制的话&#xff0c;遭不住的 忽然发现这个效果很像绒毛效果 于是找了博客康康 https://zhuanlan.zhihu.com/p/256…

Ubuntu | 安装 Truffle 框架(安装缓慢)

目录 预备工作具体步骤Step1&#xff1a;安装 nvma. 官方方式&#xff08;可能失败&#xff09;b. 压缩包安装方式 Step2&#xff1a;安装 node.js 和 npmStep3&#xff1a;安装 Truffle 参考博客 前言&#xff1a;昨天安装 Truffle 框架&#xff0c;结果缓冲条转了一晚上都没安…

企业全球组网有哪几种常用的组网方式?

为了实现全球范围内的高效通信和数据传输&#xff0c;企业需要选择适合自身需求的组网方式。企业全球组网的有哪几种主要方式&#xff1f;一般包括传统的MPLS网络、云网络、SD-WAN技术和全球VPN&#xff0c;以帮助企业在全球范围内建立稳定、高效的网络连接。 1、传统的MPLS网络…

探索AWS EC2:云计算的强大引擎

在数字化转型的浪潮中&#xff0c;企业对计算资源的需求不断增长。亚马逊弹性计算云&#xff08;EC2&#xff09;作为AWS&#xff08;亚马逊网络服务&#xff09;的核心产品之一&#xff0c;凭借其强大的功能和灵活性&#xff0c;成为了全球企业构建和扩展应用的首选平台。无论…

数据结构(邓俊辉)学习笔记】串 10——BM_BC算法:坏字符

文章目录 1.坏字符2. 特殊情况 1.坏字符 实际上&#xff0c;刚才的实例中我们所展示的那样一个计算过程&#xff0c;就是所谓 BM 算法所采用的策略之一&#xff0c;而这一策略&#xff0c;将我们刚才所说的教训称作坏字符。 在这里&#xff0c;不妨改为基于蛮力算法的第二个版…

设置电子签名

设置点赞签名代码 export class Signature {width: number 300height: number 300canvas!: HTMLCanvasElementctx!: CanvasRenderingContext2Dprivate drawing: boolean falsepreTask: string[] []nextTask: string[] []private allTask: { x: number; y: number; color: …

Leetcode - 周赛413

目录 一&#xff0c;3274. 检查棋盘方格颜色是否相同 二&#xff0c;3275. 第 K 近障碍物查询 三&#xff0c;3276. 选择矩阵中单元格的最大得分 四&#xff0c;3277. 查询子数组最大异或值 一&#xff0c;3274. 检查棋盘方格颜色是否相同 本题就是找规律&#xff0c;假设白…

EPLAN中如何将图纸导出为PDF文件并设置页边距?

EPLAN中如何将图纸导出为PDF文件并设置页边距? 如下图所示,在项目中选中需要导出的图纸页, 如下图所示,点击上方页-----导出------PDF, 如下图所示,在弹出的窗口中设置导出文件的名称、输出目录、输出颜色,这里建议勾选“使用打印边距”, 如下图所示,继续点击下方的设…

论文速读|重新审视奖励设计与评估:用于强健人型机器人站立与行走控制的方法

论文地址&#xff1a;https://arxiv.org/pdf/2404.19173 这篇论文为类人机器人站立和行走&#xff08;SaW&#xff09;控制器的持续可衡量改进奠定了基础。通过引入一套定量实际基准测试方法&#xff0c;作者展示了现有控制器的优缺点&#xff0c;并通过基准测试指导新控制器的…

论文速读|自然语言的最优控制合成:机遇与挑战

项目地址&#xff1a;Optimal Control Synthesis from Natural Language: Opportunities and Challenges 介绍了一种从自然语言自动生成最优控制器的框架&#xff0c;该框架主要包括以下几个步骤&#xff1a;首先&#xff0c;通过人类用户提供的初始文本和系统描述&#xff0c;…

源代码如何防泄露?做好这十条轻松应对

源代码防泄露是一个多方面的安全问题&#xff0c;涉及到技术、管理和物理等多个层面。以下是一些有效的策略和方法&#xff0c;结合深信达的SDC防泄密软件&#xff0c;来实现源代码的防泄露&#xff1a; 1. **访问控制**&#xff1a;实施基于角色的访问控制&#xff08;RBAC&am…

JUC-无锁之CAS

问题提出 (应用之互斥) package cn.itcast; import java.util.ArrayList; import java.util.List; interface Account {// 获取余额Integer getBalance();// 取款void withdraw(Integer amount);/*** 方法内会启动 1000 个线程&#xff0c;每个线程做 -10 元 的操作* 如果初始…

深度学习系列73:使用rapidStructure进行版面分析

1. 概述 项目地址https://github.com/RapidAI/RapidStructure?tabreadme-ov-file 2. 文档方向分类示例 安装$ pip install rapid-orientation import cv2 from rapid_orientation import RapidOrientation orientation_engine RapidOrientation() img cv2.imread(test_im…

C++笔记---string类(简单地使用)

1. string类介绍 string类是C标准库中给出的一种类类型&#xff0c;其目的是为了代替C语言中的字符串。 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是…

【时时三省】(C语言基础)指针进阶 例题

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 字符数组例题&#xff1a; arr后面放了六个字符 所以这个数组的元素个数就是6 第一个arr 因为他计算的是一整个数组的大小 就是打印6 第二个arr0 arr没有单独放在它的内部 所以它计算的就是…

深智城基于超融合数据库MatrixOne的一站式交通大数据平台改造

在智慧交通应用中&#xff0c;数据处理需求极为复杂&#xff0c;涉及人、车辆、道路和环境等多个方面&#xff0c;产生了大量异构数据。交通管理人员需要对这些数据进行实时分析和决策&#xff0c;以应对各种交通事件。然而&#xff0c;在实际生产中会发现数据处理缺陷、管理复…

智慧平台赋能政务管理,声通科技助力政务管理智能化

在智能时代的大潮中&#xff0c;政务管理也在不断寻求创新与突破&#xff0c;在这方面&#xff0c;涌现出了很多优秀的公司。比如声通科技的子公司西安金讯数智信息技术有限公司&#xff0c;就在AI政务热线领域有很多创新成果&#xff0c;为政务管理的智能化升级提供了新思路。…

windows安装php7.4

windows安装php7.4 1.通过官网下载所需的php版本 首先从PHP官网&#xff08;https://www.php.net/downloads.php&#xff09;或者Windows下的PHP官网&#xff08;http://windows.php.net/download/&#xff09;下载Windows版本的PHP安装包。下载后解压到一个路径下。 2.配…

爆改YOLOv8|利用yolov10的PSA注意力机制改进yolov8-高效涨点

1&#xff0c;本文介绍 PSA是一种改进的自注意力机制&#xff0c;旨在提升模型的效率和准确性。传统的自注意力机制需要计算所有位置对之间的注意力&#xff0c;这会导致计算复杂度高和训练时间长。PSA通过引入极化因子来减少需要计算的注意力对的数量&#xff0c;从而降低计算…

视频汇聚平台LntonAIServer视频质量诊断功能--偏色检测与噪声检测

随着视频监控技术的不断进步&#xff0c;视频质量成为了决定监控系统性能的关键因素之一。LntonAIServer新增的视频质量诊断功能&#xff0c;特别是偏色检测和噪声检测&#xff0c;进一步强化了视频监控系统的可靠性和实用性。下面我们将详细介绍这两项功能的技术细节、应用场景…