【Leetcode Sheet】Weekly Practice 15
Leetcode Test
2586 统计范围内的元音字符串数(11.7)
给你一个下标从 0 开始的字符串数组 words 和两个整数:left 和 right 。
如果字符串以元音字母开头并以元音字母结尾,那么该字符串就是一个 元音字符串 ,其中元音字母是 'a'、'e'、'i'、'o'、'u' 。
返回 words[i] 是元音字符串的数目,其中 i 在闭区间 [left, right] 内。
提示:
1 <= words.length <= 10001 <= words[i].length <= 10words[i]仅由小写英文字母组成0 <= left <= right < words.length
【模拟】
bool check(char t){if(t=='a' || t=='e' || t=='i' || t=='o' || t=='u'){return 1;}return 0;
}int vowelStrings(char** words, int wordsSize, int left, int right) {int cnt=0;for(int i=left;i<=right;i++){char t1=words[i][0];char t2=words[i][strlen(words[i])-1];if(check(t1) && check(t2)){cnt++;}}return cnt;
}
2609 最长平衡子字符串(11.8)
给你一个仅由 0 和 1 组成的二进制字符串 s 。
如果子字符串中 所有的 0 都在 1 之前 且其中 0 的数量等于 1 的数量,则认为 s 的这个子字符串是平衡子字符串。请注意,空子字符串也视作平衡子字符串。
返回 s 中最长的平衡子字符串长度。
子字符串是字符串中的一个连续字符序列。
提示:
1 <= s.length <= 50'0' <= s[i] <= '1'
【模拟 + 遍历】
int findTheLongestBalancedSubstring(char * s){int n=strlen(s),cnt1=0,cnt2=0,cnt=0;for(int i=0;i<n;i++){//s[i]=='1'if(s[i]=='1'){cnt2++;cnt=fmax(cnt,2*fmin(cnt1,cnt2));}//s[i]=='0',i==0初始化,上一个是1,也初始化else if(i==0 || s[i-1]=='1'){cnt1=1;cnt2=0;}//s[i]=='0',上一个也是0else{cnt1++;}}return cnt;
}
2258 逃离火灾(11.9)
给你一个下标从 0 开始大小为 m x n 的二维整数数组 grid ,它表示一个网格图。每个格子为下面 3 个值之一:
0表示草地。1表示着火的格子。2表示一座墙,你跟火都不能通过这个格子。
一开始你在最左上角的格子 (0, 0) ,你想要到达最右下角的安全屋格子 (m - 1, n - 1) 。每一分钟,你可以移动到 相邻 的草地格子。每次你移动 之后 ,着火的格子会扩散到所有不是墙的 相邻 格子。
请你返回你在初始位置可以停留的 最多 分钟数,且停留完这段时间后你还能安全到达安全屋。如果无法实现,请你返回 -1 。如果不管你在初始位置停留多久,你 总是 能到达安全屋,请你返回 109 。
注意,如果你到达安全屋后,火马上到了安全屋,这视为你能够安全到达安全屋。
如果两个格子有共同边,那么它们为 相邻 格子。
提示:
m == grid.lengthn == grid[i].length2 <= m, n <= 3004 <= m * n <= 2 * 104grid[i][j]是0,1或者2。grid[0][0] == grid[m - 1][n - 1] == 0
【二分】2258. 逃离火灾 - 力扣(LeetCode)
class Solution {const int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};// 返回能否在初始位置停留 t 分钟,并安全到达安全屋bool check(vector<vector<int>> &grid, int t) {int m = grid.size(), n = grid[0].size();vector<vector<int>> on_fire(m, vector<int>(n));vector<pair<int, int>> f;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == 1) {on_fire[i][j] = true; // 标记着火的位置f.emplace_back(i, j);}}}// 火的 BFSauto spread_fire = [&]() {vector<pair<int, int>> nf;for (auto &[i, j]: f) {for (auto &[dx, dy]: dirs) { // 枚举上下左右四个方向int x = i + dx, y = j + dy;if (0 <= x && x < m && 0 <= y && y < n && !on_fire[x][y] && grid[x][y] == 0) {on_fire[x][y] = true; // 标记着火的位置nf.emplace_back(x, y);}}}f = move(nf);};while (t-- && !f.empty()) { // 如果火无法扩散就提前退出spread_fire(); // 火扩散}if (on_fire[0][0]) {return false; // 起点着火,寄}// 人的 BFSvector<vector<int>> vis(m, vector<int>(n));vis[0][0] = true;vector<pair<int, int>> q{{0, 0}};while (!q.empty()) {vector<pair<int, int>> nq;for (auto &[i, j]: q) {if (on_fire[i][j]) continue; // 人走到这个位置后,火也扩散到了这个位置for (auto &[dx, dy]: dirs) { // 枚举上下左右四个方向int x = i + dx, y = j + dy;if (0 <= x && x < m && 0 <= y && y < n && !on_fire[x][y] && !vis[x][y] && grid[x][y] == 0) {if (x == m - 1 && y == n - 1) {return true; // 我们安全了…暂时。}vis[x][y] = true; // 避免反复访问同一个位置nq.emplace_back(x, y);}}}q = move(nq);spread_fire(); // 火扩散}return false; // 人被火烧到,或者没有可以到达安全屋的路}public:int maximumMinutes(vector<vector<int>> &grid) {int m = grid.size(), n = grid[0].size();// 这里我用开区间二分(其它写法也可以)int left = -1, right = m * n + 1;while (left + 1 < right) {int mid = (left + right) / 2;(check(grid, mid) ? left : right) = mid;}return left < m * n ? left : 1'000'000'000;}
};
2300 咒语和药水的成功对数(11.10)
给你两个正整数数组 spells 和 potions ,长度分别为 n 和 m ,其中 spells[i] 表示第 i 个咒语的能量强度,potions[j] 表示第 j 瓶药水的能量强度。
同时给你一个整数 success 。一个咒语和药水的能量强度 相乘 如果 大于等于 success ,那么它们视为一对 成功 的组合。
请你返回一个长度为 n 的整数数组 pairs,其中 pairs[i] 是能跟第 i 个咒语成功组合的 药水 数目。
提示:
n == spells.lengthm == potions.length1 <= n, m <= 1051 <= spells[i], potions[i] <= 1051 <= success <= 1010
【二分】
/*** Note: The returned array must be malloced, assume caller calls free().*/
int cmp(void *a,void *b){return *(int*)a-*(int*)b;
}int binarysearch(int *a,int low,int high,long long target){int ans=high+1; //初始化while(low<=high){int mid=low+(high-low)/2;if(a[mid]>target){ans=mid;high=mid-1;}else{low=mid+1;}}return ans;
}int* successfulPairs(int* spells, int spellsSize, int* potions, int potionsSize, long long success, int* returnSize) {qsort(potions,potionsSize,sizeof(int),cmp);int *ret=malloc(sizeof(int)*spellsSize);for(int i=0;i<spellsSize;i++){long long t=(success-1)/spells[i]; //success-1?ret[i]=potionsSize-binarysearch(potions,0,potionsSize-1,t);}*returnSize=spellsSize;return ret;
}
765 情侣牵手(11.11)
n 对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手。
人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的 ID。情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2n-2, 2n-1)。
返回 最少交换座位的次数,以便每对情侣可以并肩坐在一起。 每次交换可选择任意两人,让他们站起来交换座位。
提示:
2n == row.length2 <= n <= 30n是偶数0 <= row[i] < 2nrow中所有元素均无重复
【贪心】
class Solution {
public:int minSwapsCouples(vector<int>& row) {int len = row.size(), ret = 0;vector<int> idxs(len); //记录情侣位置的表idxsfor (int i = 0; i < len; i++){idxs[row[i]] = i; //从值row[i]查坐标i}for (int i = 0; i < len; i+=2){int lover_0 = row[i];int lover_1 = lover_0 ^ 1; //异或取到情侣的另一半if (row[i+1] == lover_1) continue; //情侣就在身边int idx_lover_1 = idxs[lover_1]; //情侣不在身边,查找idxs表int bubble = row[i+1]; //记录错误的情侣,也就是别人的swap(row[idx_lover_1], row[i+1]); //交换错误的情侣和我的情侣swap(idxs[lover_1], idxs[bubble]); //idxs表也进行交换ret++; //交换次数自增1}return ret;}
};
715 Range模块(11.12)
Range模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。
半开区间 [left, right) 表示所有 left <= x < right 的实数 x 。
实现 RangeModule 类:
RangeModule()初始化数据结构的对象。void addRange(int left, int right)添加 半开区间[left, right),跟踪该区间中的每个实数。添加与当前跟踪的数字部分重叠的区间时,应当添加在区间[left, right)中尚未跟踪的任何数字到该区间中。boolean queryRange(int left, int right)只有在当前正在跟踪区间[left, right)中的每一个实数时,才返回true,否则返回false。void removeRange(int left, int right)停止跟踪 半开区间[left, right)中当前正在跟踪的每个实数。
提示:
1 <= left < right <= 109- 在单个测试用例中,对
addRange、queryRange和removeRange的调用总数不超过104次
【有序集合】(官解)715. Range 模块 - 力扣(LeetCode)
class RangeModule {map<int, int> intervals;
public:RangeModule() {}//添加区间,跟踪区间内的数。void addRange(int left, int right) {auto it = intervals.upper_bound(left);if (it != intervals.begin()) {auto start = prev(it);if (start->second >= right) {return;}if (start->second >= left) {left = start->first;intervals.erase(start);}}while (it != intervals.end() && it->first <= right) {right = max(right, it->second);it = intervals.erase(it);}intervals[left] = right;}//在当前正在跟踪区间中的每个实数时,返回1bool queryRange(int left, int right) {auto it = intervals.upper_bound(left);if (it == intervals.begin()) {return false;}it = prev(it);return right <= it->second;}//停止跟踪区间中当前正在跟踪的每个实数void removeRange(int left, int right) {auto it = intervals.upper_bound(left);if (it != intervals.begin()) {auto start = prev(it);if (start->second >= right) {int ri = start->second;if (start->first == left) {intervals.erase(start);}else {start->second = left;}if (right != ri) {intervals[right] = ri;}return;}else if (start->second > left) {if (start->first == left) {intervals.erase(start);}else {start->second = left;}}}while (it != intervals.end() && it->first < right) {if (it->second <= right) {it = intervals.erase(it);}else {intervals[right] = it->second;intervals.erase(it);break;}}}
};
307 区域和检索 - 数组可修改(11.13)
给你一个数组 nums ,请你完成两类查询。
- 其中一类查询要求 更新 数组
nums下标对应的值 - 另一类查询要求返回数组
nums中索引left和索引right之间( 包含 )的nums元素的 和 ,其中left <= right
实现 NumArray 类:
NumArray(int[] nums)用整数数组nums初始化对象void update(int index, int val)将nums[index]的值 更新 为valint sumRange(int left, int right)返回数组nums中索引left和索引right之间( 包含 )的nums元素的 和 (即,nums[left] + nums[left + 1], ..., nums[right])
提示:
1 <= nums.length <= 3 * 104-100 <= nums[i] <= 1000 <= index < nums.length-100 <= val <= 1000 <= left <= right < nums.length- 调用
update和sumRange方法次数不大于3 * 104
【分块处理】
class NumArray {
private:vector<int> sum; // sum[i] 表示第 i 个块的元素和int size; // 块的大小vector<int> &nums;
public:NumArray(vector<int>& nums) : nums(nums) {int n = nums.size();size = sqrt(n);sum.resize((n + size - 1) / size); // n/size 向上取整for (int i = 0; i < n; i++) {sum[i / size] += nums[i];}}void update(int index, int val) {sum[index / size] += val - nums[index];nums[index] = val;}int sumRange(int left, int right) {int b1 = left / size, i1 = left % size, b2 = right / size, i2 = right % size;if (b1 == b2) { // 区间 [left, right] 在同一块中return accumulate(nums.begin() + b1 * size + i1, nums.begin() + b1 * size + i2 + 1, 0);}int sum1 = accumulate(nums.begin() + b1 * size + i1, nums.begin() + b1 * size + size, 0);int sum2 = accumulate(nums.begin() + b2 * size, nums.begin() + b2 * size + i2 + 1, 0);int sum3 = accumulate(sum.begin() + b1 + 1, sum.begin() + b2, 0);return sum1 + sum2 + sum3;}
};/*** Your NumArray object will be instantiated and called as such:* NumArray* obj = new NumArray(nums);* obj->update(index,val);* int param_2 = obj->sumRange(left,right);*/
相关文章:
【Leetcode Sheet】Weekly Practice 15
Leetcode Test 2586 统计范围内的元音字符串数(11.7) 给你一个下标从 0 开始的字符串数组 words 和两个整数:left 和 right 。 如果字符串以元音字母开头并以元音字母结尾,那么该字符串就是一个 元音字符串 ,其中元音字母是 a、e、i、o、u…...
人力资源社会保障部办公厅关于推行专业技术人员职业资格电子证书的通知
(人社厅发〔2021〕97号) 各省、自治区、直辖市及新疆生产建设兵团人力资源社会保障厅(局),中共海南省委人才发展局,国务院有关部门、直属机构人事部门,有关协会、学会: 为贯彻落实…...
什么是光电耦合器?如何选择型号及种类
光电耦合器(英文缩写为OC)亦称光电隔离器,简称光耦;以光为媒介传输电信号;它对输入、输出电信号有良好的隔离作用,是目前种类最多、用途最广的光电器件之一;所以,它在各种电路中得到广泛的应用。 光耦合器…...
hive里因为列名用了关键字导致建表失败
代码 现象 ParseException line 6:4 cannot recognize input near percent String COMMENT in column name or primary key or foreign key 23/11/13 11:52:57 ERROR org.apache.hadoop.hive.ql.Driver: FAILED: ParseException line 6:4 cannot recognize input near percent …...
MySQL 报错 incorrect datetime value ‘0000-00-00 00:00:00‘ for column
使用navicat导入数据时报错: MySQL 报错 incorrect datetime value ‘0000-00-00 00:00:00’ for column 这是因为当前的MySQL不支持datetime为0的情况。 MySQL报incorrect datetime value ‘0000-00-00 00:00:00’ for column错误原因,是由于在MySQL5.7…...
Jira Data Center(非集群)升级操作
一、升级准备 Jira 管理界面执行升级检查下载升级包,使用原操作方式相同的方式安装。我这里原来的版本是通过./atlassian-jira-software-9.11.2-x64.bin安装的,接下来下载atlassian-jira-software-9.11.3-x64.bin的安装文件停止 Jira,bin/st…...
Spring IOC - BeanDefinition解析
1. BeanDefinition的属性 BeanDefinition作为接口定义了属性的get、set方法。这些属性基本定义在其直接实现类AbstractBeanDefinition中,各属性的含义如下表所示: 类型 名称 含义 常量 SCOPE_DEFAULT 默认作用域:单例模式 AUT…...
ds前后台博客系统
源码私信或者公众号java大师获取 博客简介:本博客采用Spring Boot LayUI做为基础,进行的博客系统开发,与bootvue相比,更为适合开发简单的系统,并且更容易上手,简单!高效!更易上手&a…...
算法leetcode|88. 合并两个有序数组(rust重拳出击)
文章目录 88. 合并两个有序数组:样例 1:样例 2:样例 3:提示: 分析:题解:rust:go:c:python:java: 88. 合并两个有序数组: …...
GoLong的学习之路,进阶,语法之并发(并发错误处理)补充并发三部曲
这篇文章主要讲的是如何去处理并发的错误。 在Go语言中十分便捷地开启goroutine去并发地执行任务,但是如何有效的处理并发过程中的错误则是一个很棘手的问题。 文章目录 recovererrgroup recover 哦对,似乎没写错误处理的文章。后面补上。 首先&…...
猪酒店房价采集
<?php // 设置代理 $proxy_host jshk.com.cn;// 创建一个cURL资源 $ch curl_init();// 设置代理 curl_setopt($ch, CURLOPT_PROXY, $proxy_host.:.$proxy_port);// 连接URL curl_setopt($ch, CURLOPT_URL, "http://www.zujia.com/");// 发送请求并获取HTML文档…...
Java基础知识第四讲:Java 基础 - 深入理解泛型机制
Java 基础 - 深入理解泛型机制 背景:Java泛型这个特性是从JDK 1.5才开始加入的,为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”࿰…...
ceph-deploy bclinux aarch64 ceph 14.2.10【2】vdbench rbd 块设备rbd 测试失败
上篇 ceph-deploy bclinux aarch64 ceph 14.2.10-CSDN博客 安装vdbench 下载vdbench 下载页面 Vdbench Downloads (oracle.com) 包下载 需要账号登录,在弹出层点击同意才能继续下载 用户手册 https://download.oracle.com/otn/utilities_drivers/vdbench/vdb…...
split_train_val
# coding:utf-8 import os import random import argparse parser argparse.ArgumentParser() # xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下 parser.add_argument(--xml_path, defaultdata_door_white/xml/train, typestr, helpinput xm…...
Linux Mint 21.3 将搭载 Cinnamon 6.0 和实验性 Wayland 支持
导读Wayland 会话可能在 Linux Mint 23 系列中成为默认选项,预计将在 2026 年实现。 Linux Mint 项目今天在他们的每月新闻通讯中 宣布,他们已经开始着手在未来的 Linux Mint 发行版中实施 Wayland 会话,最初将在 Linux Mint 21.3 中提供。 …...
名师助阵龙讯旷腾PWmat+半导体缺陷培训暨半导体缺陷计算大赛
半导体缺陷计算大赛 选拔赛截止日期:11月23日 参与杭州线下培训直接跳过选拔赛 大赛亮点 线上免费培训、线下限时领取免费名额 线下杭州培训可直通决赛,跳过选拔赛 线上培训有3次机会参与考试进入决赛 已购/未购用户均可参加、无身份限定 使用Mc…...
Kotlin与Java写法的变更
目录 获取类的Java Class属性 类型检查 for循环 switch语句 if判断 获取类的Java Class属性 //Java Intent intent new Intent(this, MainActivity.class);//Kotlin val intent Intent(this, MainActivity::class.java) 类型检查 //Java apple instanceof Fruit !(app…...
京东数据软件系统:京东销量和销额数据在哪里看?
京东平台店铺众多,行业同行也数不胜数,若想要在平台中更好的运营店铺,品牌需要做好数据分析。下面结合鲸参谋电商数据分析平台这一数据分析工具,我们来看一看品牌在做数据分析时需要注重哪些数据维度。 *行业数据 京东商家通过鲸…...
美观且功能丰富的控制台:5个.Net开源项目
今天一起盘点下,9月份推荐的5个.Net开源项目(点击标题查看详情)。 1、FTP开源库 FluentFTP是一个基于.Net开发的,可用于FTP和FTPS文件传输。该项目优化了速度,并提供简单易用的API,让开发人员可以快速地集…...
深度学习模型基于Python+TensorFlow+Django的垃圾识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 要使用Python、TensorFlow和Django构建一个垃圾识别系统,您可以按照以下步骤进行操作: 安装…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
