LeetCode 刷题记录——从零开始记录自己一些不会的(二)

20. 替换后的最长重复字符

  • 题意

给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。

在执行上述操作后,返回包含相同字母的最长子字符串的长度。

  • 思路

image-20230912101653098

  • 代码
class Solution {
public:int characterReplacement(string s, int k) {vector<int> num(26);int n = s.length();int maxn = 0;int left = 0,right = 0;while (right < n) {num[s[right]-'A'] ++;maxn = max(maxn,num[s[right]-'A']);if (right - left + 1 - maxn > k) {num[s[left]-'A'] --;left ++;}right ++;}return right - left;}
};

21. 最大宽度坡

  • 题意

给定一个整数数组 A是元组 (i, j),其中 i < jA[i] <= A[j]。这样的坡的宽度为 j - i

找出 A 中的坡的最大宽度,如果不存在,返回 0 。

  • 思路

image-20230912111215808

  • 代码
class Solution {
public:int maxWidthRamp(vector<int>& nums) {stack<int> s;int res = 0;int n = nums.size();s.push(0);for (int i = 0;i < n;i ++) {if (s.empty()||nums[s.top()] > nums[i]) s.push(i);}for (int j = n-1;j >= res;--j) {while (s.size()&&nums[s.top()] <= nums[j]) {int pos = s.top();s.pop();res = max(res,j - pos);}}return res;}
};

22. 销售利润最大化

  • 题意

image-20230922211922241

  • 思路

区间合并+动态规划

image-20230922212042158

  • 代码
class Solution {
public:int maximizeTheProfit(int n, vector<vector<int>> &offers) {vector<vector<pair<int, int>>> groups(n);for (auto &offer: offers)groups[offer[1]].emplace_back(offer[0], offer[2]);vector<int> f(n + 1);for (int end = 0; end < n; end++) {f[end + 1] = f[end];for (auto &[start, gold]: groups[end])f[end + 1] = max(f[end + 1], f[start] + gold);}return f[n];}
};

23. 判断是否能拆分数组

  • 题意

image-20230922221542787

  • 思路

image-20230922221952460

  • 代码
class Solution {public boolean canSplitArray(List<Integer> nums, int m) {//区间DPint n=nums.size();//f[i][j]:nums[i...j]能否拆分成合法数组boolean[][] f=new boolean[n][n];int[] pre=new int[n];pre[0]=nums.get(0);//构建前缀和数组for(int i=1;i<n;i++){pre[i]=pre[i-1]+nums.get(i);}for(int i=n-1;i>=0;i--){f[i][i]=true;if(i+1<n)   f[i][i+1]=true;for(int j=i+2;j<n;j++){//pre[j]-pre[i]表示sum(nums[i+1...j])//若sum(nums[i+1...j])>=m,那么nums[i...j]能否合法拆分取决于nums[i+1...j]能否合法拆分if(pre[j]-pre[i]>=m&&f[i+1][j]){f[i][j]=true;}//pre[j]-pre[i]+nums.get(i)-nums.get(j)表示sum(nums[i...j-1])//这种写法可以防止数组越界//若sum(nums[i...j-1])>=m,那么nums[i...j]能否合法拆分取决于nums[i...j-1]能否合法拆分else if(pre[j]-pre[i]+nums.get(i)-nums.get(j)>=m&&f[i][j-1]){f[i][j]=true;}else{f[i][j]=false;}               }}return f[0][n-1];}
};
  • 思路2

image-20230922222045296

  • 代码
class Solution {
public:bool canSplitArray(vector<int> &nums, int m) {int n = nums.size();if (n <= 2) return true;for (int i = 1; i < n; i++)if (nums[i - 1] + nums[i] >= m)return true;return false;}
};

24. 找出最安全路径

  • 思路

image-20230922222140352

  • 思路

二分+BFS

  • 代码
// 二分 + BFS
int maximumSafenessFactor(vector<vector<int>> &grid) {typedef pair<int, int> P;const int N = 401;int n = grid.size();int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};// 1.求每个点的安全系数,同上// 2.求最大安全系数// 2.1 check函数,检查是否存在结点安全系数均大于等于k的路径function<bool(int)> check = [&](int k) {bool f[n][n];memset(f, 0, sizeof f);queue<P> q;q.emplace(0, 0), f[0][0] = true;while (!q.empty()) {int x = q.front().first, y = q.front().second;q.pop();for (int i = 0; i < 4; i++) {int u = x + dx[i], v = y + dy[i];if (u < 0 || u >= n || v < 0 || v >= n ||f[u][v] || d[u][v] < k)continue;q.emplace(u, v), f[u][v] = true;}}return f[n - 1][n - 1];};// 2.2 二分int l = 0, r = min(d[0][0], d[n - 1][n - 1]), mid;while (l < r) {mid = (l + r + 1) >> 1;if (check(mid))l = mid;else r = mid - 1;}return l;
};
  • 思路2

image-20230922222510370

  • 代码
class Solution {static constexpr int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
public:int maximumSafenessFactor(vector<vector<int>> &grid) {int n = grid.size();vector<pair<int, int>> q;vector<vector<int>> dis(n, vector<int>(n, -1));for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (grid[i][j]) {q.emplace_back(i, j);dis[i][j] = 0;}}}vector<vector<pair<int, int>>> groups = {q};while (!q.empty()) { // 多源 BFSvector<pair<int, int>> nq;for (auto &[i, j]: q) {for (auto &d: dirs) {int x = i + d[0], y = j + d[1];if (0 <= x && x < n && 0 <= y && y < n && dis[x][y] < 0) {nq.emplace_back(x, y);dis[x][y] = groups.size();}}}groups.push_back(nq); // 相同 dis 分组记录q = move(nq);}// 并查集模板vector<int> fa(n * n);iota(fa.begin(), fa.end(), 0);function<int(int)> find = [&](int x) -> int { return fa[x] == x ? x : fa[x] = find(fa[x]); };for (int ans = (int) groups.size() - 2; ans > 0; ans--) {for (auto &[i, j]: groups[ans]) {for (auto &d: dirs) {int x = i + d[0], y = j + d[1];if (0 <= x && x < n && 0 <= y && y < n && dis[x][y] >= dis[i][j])fa[find(x * n + y)] = find(i * n + j);}}if (find(0) == find(n * n - 1)) // 写这里判断更快些return ans;}return 0;}
};

无意中发现的大佬博客

多源BFS

LeetCode 75 精选面试必备的75道核心题目

1. 递增的三元子序列
  • 题意

image-20230915122335059

  • 思路

树状数组+哈希

image-20230915122537986

  • 代码
class Solution {
public:bool increasingTriplet(vector<int>& nums) {int n = nums.size();if (n < 3) {return false;}int first = nums[0], second = INT_MAX;for (int i = 1; i < n; i++) {int num = nums[i];if (num > second) {return true;} else if (num > first) {second = num;} else {first = num;}}return false;}
};
2. 盛最多水的容器
  • 题意

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

**说明:**你不能倾斜容器。

img

  • 思路

image-20230916203200681

  • 代码
class Solution {
public:int maxArea(vector<int>& height) {int i = 0, j = height.size() - 1, res = 0;while(i < j) {res = height[i] < height[j] ? max(res, (j - i) * height[i++]): max(res, (j - i) * height[j--]); }return res;}
};
  • 扩展 接雨水

    • 题意

    给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

    img

    • 思路

    image-20230916204849361

    fig1

    • 代码
    class Solution {
    public:int trap(vector<int>& height) {int n = height.size();if (n == 0) {return 0;}vector<int> leftMax(n);leftMax[0] = height[0];for (int i = 1; i < n; ++i) {leftMax[i] = max(leftMax[i - 1], height[i]);}vector<int> rightMax(n);rightMax[n - 1] = height[n - 1];for (int i = n - 2; i >= 0; --i) {rightMax[i] = max(rightMax[i + 1], height[i]);}int ans = 0;for (int i = 0; i < n; ++i) {ans += min(leftMax[i], rightMax[i]) - height[i];}return ans;}
    };
    
    • 单调栈做法

    img

    image-20230916210426274

    • 代码
    class Solution {
    public:int trap(vector<int>& height) {int ans = 0;stack<int> stk;int n = height.size();for (int i = 0; i < n; ++i) {while (!stk.empty() && height[i] > height[stk.top()]) {int top = stk.top();stk.pop();if (stk.empty()) {break;}int left = stk.top();int currWidth = i - left - 1;int currHeight = min(height[left], height[i]) - height[top];ans += currWidth * currHeight;}stk.push(i);}return ans;}
    };
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/85186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DOMBOM

DOM Document Object Model&#xff1a;文档对象模型 DOM树 文档&#xff1a;一个页面就是一个文档&#xff1b; 节点&#xff1a;网页中的所有内容&#xff0c;在文档树中都是节点&#xff0c;使用node表示&#xff1b; DOM操作节点实现网页特效的步骤&#xff1a; 获取ht…

软件需求文档、设计文档、开发文档、运维文档大全

在软件开发过程中&#xff0c;文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程&#xff0c;还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用&#xff0c;以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档要求…

DA5 网站用户没有补全的信息

目录 1.题目描述 2.输入描述 3.输出描述 4.题目分析 5.通过代码 1.题目描述 现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID …

Vosviewer的安装与使用

Vosviewer的安装与使用 1 安装2 使用参考&#xff1a; 关于vosviewer我就不过多介绍了。 vosviewer与citespace有什么区别?在这里可以引用一下知乎的文章简要说明一下&#xff1a; 1.操作难易VOSviewer很简单&#xff0c;在官网下载的时候会附带一个英文手册&#xff0c;稍微…

Linux命令基础

一、linux目录结构。 Linux没有windows的盘的概念&#xff0c;是一个树形的结构。唯一的根目录为/&#xff0c;所有的文件都在他下面。 描述方式也与windows有所不同 二、命令基础格式。 command [-options] [parameter]&#xff08;[ ]表示可选的&#xff09; command:必…

以太坊代币标准ERC20、ERC721

两个概念 ERC(Ethereum Request for Comment) 以太坊意见征集稿EIP(Ethereum Improvement Proposals)以太坊改进提案 ERC和EIP用于使得以太坊更加完善&#xff1b;在ERC中提出了很多标准&#xff0c;用的最多的标准就是它的Token标准; 有哪些标准详细见https://eips.ethereum…

【lesson7】yum的介绍及使用

文章目录 预备工作yum的基本过程yum的操作**yum源问题&#xff1a;****yum三板斧&#xff1a;**yum listyum searchyum list | grepyum installyum install -yyum removeyum remove -y 预备工作 首先有三个问题&#xff1a; 问题解答&#xff1a; 这里我们联想到了手机 问题…

论文阅读:AugGAN: Cross Domain Adaptation with GAN-based Data Augmentation

Abstract 基于GAN的图像转换方法存在两个缺陷&#xff1a;保留图像目标和保持图像转换前后的一致性&#xff0c;这导致不能用它生成大量不同域的训练数据。论文提出了一种结构感知(Structure-aware)的图像转换网络(image-to-image translation network)。 Proposed Framework…

5.5V-65V Vin同步降压控制器,具有线路前馈SCT82630DHKR

描述&#xff1a; SCT82630是一款65V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输…

Java“牵手”义乌购商品详情数据,义乌购商品详情接口,义乌购API接口申请指南

义乌购隶属浙江义乌购电子商务有限公司旗下网站。该平台定位为依托实体市场&#xff0c;服务实体市场&#xff0c;以诚信为根本&#xff0c;将7万网上商铺与实体商铺一一对应绑定&#xff0c;为采购商和经营户提供可控、可信、可溯源的交易保障。 义乌购平台现有商铺商品、市场…

OpenHarmony Meetup常州站招募令

OpenHarmony Meetup 常州站正火热招募中&#xff01; 诚邀充满激情的开发者参与线下盛会~ 探索OpenHarmony前沿科技&#xff0c;畅谈未来前景&#xff0c; 感受OpenHarmony生态构建之路的魅力&#xff01; 线下参与&#xff0c;名额有限&#xff0c;仅限20位幸运者&#xff01…

计算机网络常见问题

1.谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f; 1.1.为什么要分层&#xff1f; 在计算机中网络是个复杂的系统&#xff0c;不同的网络与网络之间由于协议&#xff0c;设备&#xff0c;软件等各种原因在协调和通讯时容易产生各种各样的问题。例如&#xff1a;各物流…

【MySQL】 MySQL的增删改查(进阶)--贰

文章目录 &#x1f6eb;新增&#x1f6ec;查询&#x1f334;聚合查询&#x1f6a9;聚合函数&#x1f388;GROUP BY子句&#x1f4cc;HAVING &#x1f38b;联合查询⚾内连接⚽外连接&#x1f9ed;自连接&#x1f3c0;子查询&#x1f3a1;合并查询 &#x1f3a8;MySQL的增删改查(…

web前端之float布局与flex布局

float布局 <style>.nav {overflow: hidden;background-color: #6adfd0; /* 导航栏背景颜色 */}.nav a {float: left;display: block;text-align: center;padding: 14px 16px;text-decoration: none;color: #000000; /* 导航栏文字颜色 */}.nav a:hover {background-col…

测试基础知识

测试的基础知识 软件&#xff1a;控制硬件工作的工具。 软件测试&#xff1a;使用技术手段验证软件是否满足使用需求。 软件测试目的&#xff1a;减少软件缺陷&#xff0c;保证软件质量。 测试主流技能&#xff1a;功能测试、自动化测试、接口测试、性能测试 功能测试&#xff…

三相组合式过电压保护器试验

三相组合式过电压保护器试验 试验目的 三相组合式过电压保护器主要分为有带串联间隙过压保护器和无间隙过压保护器两大类&#xff0c;其试验项目内容要求分别使用高压工频交流和高压直流电源。 三相组合式过电压保护器试验&#xff0c;主要是为了及早发现设备内部绝缘受潮及…

解锁学习新方式——助您迈向成功之路

近年来&#xff0c;随着吉林开放大学广播电视大学的崛起&#xff0c;越来越多的学子选择这所优秀的学府来实现自己的梦想。而作为一名学者&#xff0c;我有幸见证了电大搜题微信公众号的诞生&#xff0c;为广大学子提供了一个全新的学习支持平台。 电大搜题微信公众号&#xff…

《深度学习工业缺陷检测》专栏介绍 CSDN独家改进实战

&#x1f4a1;&#x1f4a1;&#x1f4a1;深度学习工业缺陷检测 1&#xff09;提供工业小缺陷检测性能提升方案&#xff0c;满足部署条件&#xff1b; 2&#xff09;针对缺陷样品少等难点&#xff0c;引入无监督检测&#xff1b; 3&#xff09;深度学习 C、C#部署方案&#…

2023工博会强势回归!智微工业携八大系列重磅亮相

中国国际工业博览会&#xff08;简称"中国工博会"&#xff09;自1999年创办以来&#xff0c;历经二十余年发展创新&#xff0c;通过专业化、市场化、国际化、品牌化运作&#xff0c;已发展成为通过国际展览业协会&#xff08;UFI&#xff09;认证、中国工业领域规模最…

示例-安装office2016图文教程简体中文下载安装包

目录 简介 步骤 总结 简介 Office 2016作为一款办公软件套件&#xff0c;下载和安装 都具有许多令人印象深刻的特点。让我来为你介绍一下&#xff1a;Office 2016注重实现跨平台的一致性。无论你是在Windows、Mac、iOS还是Android上使用Office&#xff0c;你都可以享受到相似…