当前位置: 首页 > news >正文

leetcode解题思路分析(一百四十九)1297 - 1304 题

  1. 子串的最大出现次数
    给你一个字符串 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;}
};
  1. 你能从盒子里获得的最大糖果数
    给你 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;}
};
  1. 将每个元素替换为右侧最大元素
    给你一个数组 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;}
};
  1. 转变数组后最接近目标值的数组和
    给你一个整数数组 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;}
};
  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};}
};
  1. 层数最深叶子节点的和
    给你一棵二叉树的根节点 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;}
};
  1. 和为零的 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 &#xff0c;请你返回满足以下条件且出现次数最大的 任意 子串的出现次数&#xff1a; 子串中不同字母的数目必须小于等于 maxLetters 。 子串的长度必须大于等于 minSize 且小于等于 maxSize 。 首先能想到的是从MinSize开始遍历查找&am…...

你的librosa和scikit-learn打架了吗?

被这个问题困扰好久&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我的原来版本librosa0.7.1 和 scikit-learn1.3.1 一直拆了按&#xff0c;按…...

理解自动驾驶感知技术

理解自动驾驶感知技术 文章目录 什么是自动驾驶感知技术&#xff1f;自动驾驶感知技术的关键组成部分1. 雷达&#xff08;Radar&#xff09;2. 摄像头&#xff08;Camera&#xff09;3. 激光雷达&#xff08;Lidar&#xff09;4. 超声波传感器&#xff08;Ultrasonic Sensors&a…...

一款简化Python自然语言处理的开源库

迷途小书童 读完需要 3分钟 速读仅需 1 分钟 1 简介 TextBlob 是一个 Python 库&#xff0c;用于处理文本数据的自然语言处理&#xff08;NLP&#xff09;任务。它提供了简单且易于使用的 API&#xff0c;使得对文本进行分析、情感分析、词性标注、名词短语提取等任务变得更加简…...

常用Redis界面化软件

对于Redis的操作&#xff0c;前期有过介绍【Centos 下安装 Redis 及命令行操作】。而在Redis的日常开发调试中&#xff0c;可使用可视化软件方便进行操作。 本篇主要介绍Redis可视化的两款工具&#xff1a;Redis Desktop Manager和AnotherRedisDesktopManager。 1、Redis Desk…...

电脑散热——液金散热

目录 1.简介 2.传统硅脂与液金导热区别 3.特点 4.优点 5.为什么液金技术名声不太好 6.使用方法 1.简介 凡是对于电脑基础硬件有所了解的人&#xff0c;都知道硅脂是如今高性能电脑设备中必不可少的东西。芯片表面和散热器接触面&#xff0c;虽然肉眼看上去是非常光滑的金属…...

多线程锁-synchronized字节码分析

从字节码角度分析synchronized实现 javap -c(v附加信息) ***.class 文件反编译 synchronized同步代码块 >>>实现使用的是monitorenter和monitorexit指令 synchronized普通同步方法 >>>调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置&#xf…...

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® 新功能

共享和标注 优点&#xff1a;收件人在浏览器中访问共享文 件&#xff0c;无需安装3DEXPERIENCE 平台应用程序。 • 与 SOLIDWORKS 中来自您组织内部或外部的任何人无缝 共享您的设计。 • 直接将评论和标注附加到您的设计作品中&#xff0c;便于立即获得 反馈。 支持 SOLIDWO…...

AMD CPU 虚拟机安装 macos 系统的各虚拟机系统对比

软硬件环境&#xff1a; CPU:AMD R7 7735HS 8核16线程 显卡&#xff1a;AMD R680M 集显 内存&#xff1a;32GB DDR5 硬盘&#xff1a;2TB SSD Windows11 1、VMware Workstation 我用的是17 的版本&#xff0c;使用方便&#xff0c;对于macos 12及以下的安装在需要修改vmx 文…...

php实战案例记录(20)时间比较

在PHP中&#xff0c;有几种常见的方法可以进行时间比较。以下是其中的一些方法&#xff1a; 使用比较运算符&#xff1a;可以使用比较运算符&#xff08;如小于"<“、大于”>“、小于等于”<“、大于等于”>“、等于”“、不等于”!"等&#xff09;来比…...

web中缓存的几种方式

看了构建高性能的web站点一书&#xff0c;对其中的集中web缓存进行一个总结 1 应用程序实现的动态页面缓存 应用程序把动态文件生成的html文件缓存到文件服务器&#xff0c;以后用户请求动态文件&#xff0c;直接从文件服务器加载对应的静态缓存的html文件返回给用户&#xff…...

Stable Diffusion生成图片

画质 masterpiece,best quality,illustration,extremely detail CG unity 8k wallpaper,ultra-detailed,depth of field 杰作&#xff0c;最佳质量&#xff0c;插图&#xff0c;极度详细的8K壁纸&#xff0c;超高详细度&#xff0c;景深 画风 Chinese ink painting,water color…...

MySQL增删查改(进阶1)

一、数据库约束 约束&#xff1a;按照一定条件进行规范的做事&#xff1b; 表定义的时候&#xff0c;某些字段保存的数据需要按照一定的约束条件&#xff1b; 1.null约束 字段null&#xff1a;该字段可以为空&#xff1b;not null&#xff1a;该字段不能为空不指定的话就是…...

RabbitMQ-发布订阅模式和路由模式

接上文 RabbitMQ-工作队列 1 发布订阅模式 将之前的配置类内容都替换掉 Bean("fanoutExchange")public Exchange exchange(){//注意这里是fanoutExchangereturn ExchangeBuilder.fanoutExchange("amq.fanout").build();}Bean("yydsQueue1")publ…...

RabbitMQ-主题模式

接上文 RabbitMQ-发布订阅模式和路由模式 1 主题模式 #通配符 代表0个或多个。*通配符 代表 1个或多个 进行测试&#xff0c;修改配置文件 Configuration public class RabbitConfiguration {Bean("topicExchange") //这里使用预置的Topic类型交换机public Exchan…...

阅读文献小技巧

在科研中,文献的阅读是非常重要的一环。对于汇报论文的文献阅读,更是需要有一定的技巧。下面列出一些阅读汇报论文文献的技巧。 1.明确阅读目的和任务。在阅读每篇文献之前,需要明确阅读该文献的目的和任务,例如是否需要了解该领域的最新进展、寻找相关数据或案例等。是为…...

简易的贪吃蛇小游戏(以后或许会更新)C++/C语言

第一版&#xff1a; #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 镜像&#xff0c;要求基于 centos…...

哨兵(Sentinel-1、2)数据下载

哨兵&#xff08;Sentinel-1、2&#xff09;数据下载 一、登陆欧空局网站 二、检索 先下载2号为光学数据 分为S2A和S2B&#xff0c;产品种类有1C和2A&#xff0c;区别就是2A是做好大气校正的影像&#xff0c;当然数量也会少一些&#xff0c;云量检索条件中记得要按格式&#x…...

从“单点防御”到“全局联动”:手把手教你用EDR和NDR构建企业安全闭环

从“单点防御”到“全局联动”&#xff1a;手把手教你用EDR和NDR构建企业安全闭环 当企业的安全团队还在疲于应对零散的端点告警和网络流量异常时&#xff0c;攻击者早已开始采用自动化工具进行横向移动。传统孤立的防御手段就像用多个单点摄像头监控银行金库——每个摄像头都…...

Transformer位置编码避坑指南:手把手教你用RoPE解决长文本外推难题(附Torch复现)

Transformer长文本处理实战&#xff1a;RoPE位置编码的工程化解决方案 在构建现代NLP系统时&#xff0c;处理长文本序列一直是Transformer架构面临的重大挑战。当序列长度超过模型预训练时的最大位置编码范围时&#xff0c;传统方法的性能会显著下降。这种现象在构建聊天机器人…...

从v4l2-ctl命令到media拓扑:手把手教你调试RK3568上的OV8858摄像头图像

RK3568平台OV8858摄像头深度调试实战&#xff1a;从硬件链路到图像优化的全流程解析 当你在RK3568平台上调试OV8858摄像头时&#xff0c;是否遇到过这样的场景&#xff1a;设备树配置看似正确&#xff0c;但摄像头输出的图像却出现花屏、颜色异常或干脆没有信号&#xff1f;作为…...

实战指南:为spring boot项目快速配置最优jdk环境,助力应用高效部署

最近在准备一个Spring Boot项目时&#xff0c;发现JDK环境配置这个看似简单的环节其实藏着不少学问。特别是当项目需要兼顾开发效率和生产环境稳定性时&#xff0c;合理的JDK配置方案就显得尤为重要。今天就来分享下我的实战经验&#xff0c;以及如何利用工具快速搞定这些配置。…...

洛雪音乐音源项目:免费高品质音乐资源获取的终极方案

洛雪音乐音源项目&#xff1a;免费高品质音乐资源获取的终极方案 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 1 价值定位&#xff1a;重新定义音乐资源获取体验 洛雪音乐音源项目作为一款开源…...

PKSM终极指南:从第一世代到第八世代的宝可梦存档管理神器

PKSM终极指南&#xff1a;从第一世代到第八世代的宝可梦存档管理神器 【免费下载链接】PKSM Gen I to GenVIII save manager. 项目地址: https://gitcode.com/gh_mirrors/pk/PKSM PKSM是一款功能强大的免费开源宝可梦存档管理工具&#xff0c;支持从第一世代到第八世代的…...

小白友好!Stable Diffusion v1.5单卡运行多个服务,详细步骤+避坑指南

小白友好&#xff01;Stable Diffusion v1.5单卡运行多个服务&#xff0c;详细步骤避坑指南 1. 为什么需要单卡多服务&#xff1f; 很多刚接触Stable Diffusion的朋友都会遇到这样的困扰&#xff1a;团队里几个人共用一台服务器&#xff0c;但GPU卡只有一张。一个人用的时候还…...

Windows自定义部署神器:从零开始的安装介质制作指南

Windows自定义部署神器&#xff1a;从零开始的安装介质制作指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat 你是否…...

vue基于springboot的目的地旅游预订网站

目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分技术实现要点扩展功能建议性能优化方向项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户模块 用户注册与登录…...

从黑客攻防角度看网络命令:如何用ping/tracert/nslookup发现网络安全隐患

网络命令的攻防实战&#xff1a;用基础工具发现隐藏的安全威胁 当大多数人还在把ping、tracert这些基础网络命令当作简单的连通性测试工具时&#xff0c;安全工程师已经将它们变成了发现网络威胁的"显微镜"。这些看似简单的命令行工具&#xff0c;在专业的安全分析场…...