【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 <= 1000
1 <= words[i].length <= 10
words[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.length
n == grid[i].length
2 <= m, n <= 300
4 <= m * n <= 2 * 104
grid[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.length
m == potions.length
1 <= n, m <= 105
1 <= spells[i], potions[i] <= 105
1 <= 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.length
2 <= n <= 30
n
是偶数0 <= row[i] < 2n
row
中所有元素均无重复
【贪心】
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]
的值 更新 为val
int sumRange(int left, int right)
返回数组nums
中索引left
和索引right
之间( 包含 )的nums元素的 和 (即,nums[left] + nums[left + 1], ..., nums[right]
)
提示:
1 <= nums.length <= 3 * 104
-100 <= nums[i] <= 100
0 <= index < nums.length
-100 <= val <= 100
0 <= 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构建一个垃圾识别系统,您可以按照以下步骤进行操作: 安装…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...