leetcode解题思路分析(一百四十九)1297 - 1304 题
- 子串的最大出现次数
给你一个字符串 s ,请你返回满足以下条件且出现次数最大的 任意 子串的出现次数:
子串中不同字母的数目必须小于等于 maxLetters 。
子串的长度必须大于等于 minSize 且小于等于 maxSize 。
首先能想到的是从MinSize开始遍历查找,然后利用set来保证满足maxLetters,用map来存储string出现的数量,最后取出现数量的最大值。然后因为子串的子串出现数量一定大于等于子串的出现数量,所以其实直接看minSize即可,少一圈循环。
class Solution {
public:int maxFreq(string s, int maxLetters, int minSize, int maxSize) {int n = s.size();unordered_map<string, int> occ;int ans = 0;for (int i = 0; i < n - minSize + 1; ++i) {string cur = s.substr(i, minSize);unordered_set<char> exist(cur.begin(), cur.end());if (exist.size() <= maxLetters) {string cur = s.substr(i, minSize);++occ[cur];ans = max(ans, occ[cur]);}}return ans;}
};
- 你能从盒子里获得的最大糖果数
给你 n 个盒子,每个盒子的格式为 [status, candies, keys, containedBoxes] ,请你按照上述规则,返回可以获得糖果的 最大数目 。
广度优先遍历,对于暂时无法打开的存在队列中等待后续机会。
class Solution {
public:int maxCandies(vector<int>& status, vector<int>& candies, vector<vector<int>>& keys, vector<vector<int>>& containedBoxes, vector<int>& initialBoxes) {int n = status.size();vector<bool> can_open(n), has_box(n), used(n);for (int i = 0; i < n; ++i) {can_open[i] = (status[i] == 1);}queue<int> q;int ans = 0;for (int box: initialBoxes) {has_box[box] = true;if (can_open[box]) {q.push(box);used[box] = true;ans += candies[box];}}while (!q.empty()) {int big_box = q.front();q.pop();for (int key: keys[big_box]) {can_open[key] = true;if (!used[key] && has_box[key]) {q.push(key);used[key] = true;ans += candies[key];}}for (int box: containedBoxes[big_box]) {has_box[box] = true;if (!used[box] && can_open[box]) {q.push(box);used[box] = true;ans += candies[box];}}}return ans;}
};
- 将每个元素替换为右侧最大元素
给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。完成所有替换操作后,请你返回这个数组。
逆向遍历一遍即可。
class Solution {
public:vector<int> replaceElements(vector<int>& arr) {int n = arr.size();vector<int> ans(n);ans[n - 1] = -1;for (int i = n - 2; i >= 0; --i) {ans[i] = max(ans[i + 1], arr[i + 1]);}return ans;}
};
- 转变数组后最接近目标值的数组和
给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。请注意,答案不一定是 arr 中的数字。
因为value的改变导致数组和单调变化,所以一定是在不超过target最接近的value和value+1中选一个。采用二分法确定value(上界为max in arr),然后比较和即可。
class Solution {
public:int check(const vector<int>& arr, int x) {int ret = 0;for (const int& num: arr) {ret += (num >= x ? x : num);}return ret;}int findBestValue(vector<int>& arr, int target) {sort(arr.begin(), arr.end());int n = arr.size();vector<int> prefix(n + 1);for (int i = 1; i <= n; ++i) {prefix[i] = prefix[i - 1] + arr[i - 1];}int l = 0, r = *max_element(arr.begin(), arr.end()), ans = -1;while (l <= r) {int mid = (l + r) / 2;auto iter = lower_bound(arr.begin(), arr.end(), mid);int cur = prefix[iter - arr.begin()] + (arr.end() - iter) * mid;if (cur <= target) {ans = mid;l = mid + 1;}else {r = mid - 1;}}int choose_small = check(arr, ans);int choose_big = check(arr, ans + 1);return abs(choose_small - target) <= abs(choose_big - target) ? ans : ans + 1;}
};
- 最大得分的路径数目
给你一个正方形字符数组 board ,你从数组最右下方的字符 ‘S’ 出发。
你的目标是到达数组最左上角的字符 ‘E’ ,数组剩余的部分为数字字符 1, 2, …, 9 或者障碍 ‘X’。在每一步移动中,你可以向上、向左或者左上方移动,可以移动的前提是到达的格子没有障碍。
一条路径的 「得分」 定义为:路径上所有数字的和。
请你返回一个列表,包含两个整数:第一个整数是 「得分」 的最大值,第二个整数是得到最大得分的方案数,请把结果对 10^9 + 7 取余。
如果没有任何路径可以到达终点,请返回 [0, 0] 。
因为只能向上、左、左上,所以动态规划解题是很容易想到的。
using PII = pair<int, int>;class Solution {
private:static constexpr int mod = (int)1e9 + 7;public:void update(vector<vector<PII>>& dp, int n, int x, int y, int u, int v) {if (u >= n || v >= n || dp[u][v].first == -1) {return;}if (dp[u][v].first > dp[x][y].first) {dp[x][y] = dp[u][v];}else if (dp[u][v].first == dp[x][y].first) {dp[x][y].second += dp[u][v].second;if (dp[x][y].second >= mod) {dp[x][y].second -= mod;}}}vector<int> pathsWithMaxScore(vector<string>& board) {int n = board.size();vector<vector<PII>> dp(n, vector<PII>(n, {-1, 0}));dp[n - 1][n - 1] = {0, 1};for (int i = n - 1; i >= 0; --i) {for (int j = n - 1; j >= 0; --j) {if (!(i == n - 1 && j == n - 1) && board[i][j] != 'X') {update(dp, n, i, j, i + 1, j);update(dp, n, i, j, i, j + 1);update(dp, n, i, j, i + 1, j + 1);if (dp[i][j].first != -1) {dp[i][j].first += (board[i][j] == 'E' ? 0 : board[i][j] - '0');}}}}return dp[0][0].first == -1 ? vector<int>{0, 0} : vector<int>{dp[0][0].first, dp[0][0].second};}
};
- 层数最深叶子节点的和
给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和 。
采用深度遍历或者广度遍历均可。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int deepestLeavesSum(TreeNode* root) {int size = 0;int sum = 0;std::list<TreeNode*> NodeList;if (root)NodeList.push_back(root);while (NodeList.size()){size = NodeList.size();sum = 0;for (int i = 0; i < size; ++i){std::list<TreeNode*>::iterator iter = NodeList.begin();if ((*iter)->left)NodeList.push_back((*iter)->left);if ((*iter)->right)NodeList.push_back((*iter)->right);sum += (*iter)->val;NodeList.pop_front();}}return sum;}
};
- 和为零的 N 个不同整数
给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为 0 。
很无聊的一道题,直接镜像对称或者从0累加最后来个-sum都可以。
class Solution {
public:vector<int> sumZero(int n) {vector<int> ret;bool isOdd = n % 2 == 0 ? false : true;int begin = 0 - n / 2;int end = n / 2;for (int i = begin; i <= end; ++i){if (i == 0 && !isOdd)continue;ret.push_back(i);}return ret;}
};
相关文章:
leetcode解题思路分析(一百四十九)1297 - 1304 题
子串的最大出现次数 给你一个字符串 s ,请你返回满足以下条件且出现次数最大的 任意 子串的出现次数: 子串中不同字母的数目必须小于等于 maxLetters 。 子串的长度必须大于等于 minSize 且小于等于 maxSize 。 首先能想到的是从MinSize开始遍历查找&am…...
你的librosa和scikit-learn打架了吗?
被这个问题困扰好久!!!!!!!!!!!!!! 我的原来版本librosa0.7.1 和 scikit-learn1.3.1 一直拆了按,按…...
理解自动驾驶感知技术
理解自动驾驶感知技术 文章目录 什么是自动驾驶感知技术?自动驾驶感知技术的关键组成部分1. 雷达(Radar)2. 摄像头(Camera)3. 激光雷达(Lidar)4. 超声波传感器(Ultrasonic Sensors&a…...
一款简化Python自然语言处理的开源库
迷途小书童 读完需要 3分钟 速读仅需 1 分钟 1 简介 TextBlob 是一个 Python 库,用于处理文本数据的自然语言处理(NLP)任务。它提供了简单且易于使用的 API,使得对文本进行分析、情感分析、词性标注、名词短语提取等任务变得更加简…...
常用Redis界面化软件
对于Redis的操作,前期有过介绍【Centos 下安装 Redis 及命令行操作】。而在Redis的日常开发调试中,可使用可视化软件方便进行操作。 本篇主要介绍Redis可视化的两款工具:Redis Desktop Manager和AnotherRedisDesktopManager。 1、Redis Desk…...
电脑散热——液金散热
目录 1.简介 2.传统硅脂与液金导热区别 3.特点 4.优点 5.为什么液金技术名声不太好 6.使用方法 1.简介 凡是对于电脑基础硬件有所了解的人,都知道硅脂是如今高性能电脑设备中必不可少的东西。芯片表面和散热器接触面,虽然肉眼看上去是非常光滑的金属…...
多线程锁-synchronized字节码分析
从字节码角度分析synchronized实现 javap -c(v附加信息) ***.class 文件反编译 synchronized同步代码块 >>>实现使用的是monitorenter和monitorexit指令 synchronized普通同步方法 >>>调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置…...
SpringCloud学习笔记-Eureka的服务拉取
假设是OrderService里面拉取Eureka的服务之一User Service 1.依然需要在该服务里面引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependenc…...
COLLABORATIVE DESIGNER FOR SOLIDWORKS® 新功能
共享和标注 优点:收件人在浏览器中访问共享文 件,无需安装3DEXPERIENCE 平台应用程序。 • 与 SOLIDWORKS 中来自您组织内部或外部的任何人无缝 共享您的设计。 • 直接将评论和标注附加到您的设计作品中,便于立即获得 反馈。 支持 SOLIDWO…...
AMD CPU 虚拟机安装 macos 系统的各虚拟机系统对比
软硬件环境: CPU:AMD R7 7735HS 8核16线程 显卡:AMD R680M 集显 内存:32GB DDR5 硬盘:2TB SSD Windows11 1、VMware Workstation 我用的是17 的版本,使用方便,对于macos 12及以下的安装在需要修改vmx 文…...
php实战案例记录(20)时间比较
在PHP中,有几种常见的方法可以进行时间比较。以下是其中的一些方法: 使用比较运算符:可以使用比较运算符(如小于"<“、大于”>“、小于等于”<“、大于等于”>“、等于”“、不等于”!"等)来比…...
web中缓存的几种方式
看了构建高性能的web站点一书,对其中的集中web缓存进行一个总结 1 应用程序实现的动态页面缓存 应用程序把动态文件生成的html文件缓存到文件服务器,以后用户请求动态文件,直接从文件服务器加载对应的静态缓存的html文件返回给用户ÿ…...
Stable Diffusion生成图片
画质 masterpiece,best quality,illustration,extremely detail CG unity 8k wallpaper,ultra-detailed,depth of field 杰作,最佳质量,插图,极度详细的8K壁纸,超高详细度,景深 画风 Chinese ink painting,water color…...
MySQL增删查改(进阶1)
一、数据库约束 约束:按照一定条件进行规范的做事; 表定义的时候,某些字段保存的数据需要按照一定的约束条件; 1.null约束 字段null:该字段可以为空;not null:该字段不能为空不指定的话就是…...
RabbitMQ-发布订阅模式和路由模式
接上文 RabbitMQ-工作队列 1 发布订阅模式 将之前的配置类内容都替换掉 Bean("fanoutExchange")public Exchange exchange(){//注意这里是fanoutExchangereturn ExchangeBuilder.fanoutExchange("amq.fanout").build();}Bean("yydsQueue1")publ…...
RabbitMQ-主题模式
接上文 RabbitMQ-发布订阅模式和路由模式 1 主题模式 #通配符 代表0个或多个。*通配符 代表 1个或多个 进行测试,修改配置文件 Configuration public class RabbitConfiguration {Bean("topicExchange") //这里使用预置的Topic类型交换机public Exchan…...
阅读文献小技巧
在科研中,文献的阅读是非常重要的一环。对于汇报论文的文献阅读,更是需要有一定的技巧。下面列出一些阅读汇报论文文献的技巧。 1.明确阅读目的和任务。在阅读每篇文献之前,需要明确阅读该文献的目的和任务,例如是否需要了解该领域的最新进展、寻找相关数据或案例等。是为…...
简易的贪吃蛇小游戏(以后或许会更新)C++/C语言
第一版: #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <windows.h>#define WIDTH 20 #define HEIGHT 20int gameOver; int score; int x, y; // 蛇头的坐标 int fruitX, fruitY; // 食物的坐标 int tailX[100], t…...
23云计算全国职业技能大赛容器云-容器编排
erp 2.2.1 容器化部署 MariaDB [0.5 分]2.2.2 容器化部署 Redis [0.5 分]2.2.3 容器化部署 Nginx [0.5 分]2.2.4 容器化部署 ERP[0.5 分]2.2.5 编排部署 ERP管理系统[1 分] 2.2.1 容器化部署 MariaDB [0.5 分] 编写 Dockerfile 文件构建 mysql 镜像,要求基于 centos…...
哨兵(Sentinel-1、2)数据下载
哨兵(Sentinel-1、2)数据下载 一、登陆欧空局网站 二、检索 先下载2号为光学数据 分为S2A和S2B,产品种类有1C和2A,区别就是2A是做好大气校正的影像,当然数量也会少一些,云量检索条件中记得要按格式&#x…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...
