【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构建一个垃圾识别系统,您可以按照以下步骤进行操作: 安装…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
