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,一经查实,立即删除!

相关文章

多重视窗管理程序 screen

当我们在使用 MobaXterm/XShell 进行远程访问服务器时&#xff0c;进行远程访问的界面往往不能关掉&#xff0c;否则&#xff0c;程序将不再运行。而且&#xff0c;程序在运行的过程中&#xff0c;还必须时刻保证网络的通常&#xff0c;这些条件都很难得到满足。 为了解决上述…

【个人笔记本】本地化部署详细流程 LLaMA中文模型:Chinese-LLaMA-Alpaca-2

不推荐小白&#xff0c;环境配置比较复杂 全部流程 下载原始模型&#xff1a;Chinese-LLaMA-Alpaca-2linux部署llamacpp环境使用llamacpp将Chinese-LLaMA-Alpaca-2模型转换为gguf模型windows部署Text generation web UI 环境使用Text generation web UI 加载模型并进行对话 准…

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:必…

SMB:使用 Ansible 自动化配置 samba 客户端服务端

写在前面 考试顺便整理博文内容整理 使用 Ansible 部署 samba 客户端和服务端理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c…

百度之星(数学基础题)

糖果促销 小度最喜欢吃糖啦&#xff01;&#xff01;&#xff01; 这天商店糖果促销&#xff0c;可给小度高兴坏了。 促销规则&#xff1a;一颗糖果有一张糖纸&#xff0c;p 张糖纸可以换取一颗糖果。换出来糖果的包装纸当然也能再换糖果。 小度想吃 k 颗糖果&#xff0c;他…

以太坊代币标准ERC20、ERC721

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

三行代码实现图像画质修复,图片清晰度修复,清晰度提升python

核心代码 # 原始文件 enhancer ImageEnhance.Sharpness(Image.open(文件路径.png)) # 增强图片 img_enhanced enhancer.enhance(增强系数float) # 输出目标文件 img_enhanced.save(文件名.png)注意&#xff0c;输入输出文件格式必须一致 所需依赖 # 文件选择框&#xff0c…

【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…

Golang 字符串

目录 1. Golang 字符串1.1. 基础概念1.2. 字符串编码1.3. 遍历字符串1.4. 类型转换1.5. 总结1.6. String Concatenation (字符串连接)1.6.1. Using the operator1.6.2. Using the operator1.6.3. Using the Join method1.6.4. Using Sprintf method1.6.5. Using Go string Bu…

K-means 聚类算法学习笔记

K-means 聚类算法 是一种无监督学习算法&#xff0c;用来将 n n n 个样本点分成 k k k 类&#xff0c;使得整个数据集的误差平方和 S S E SSE SSE 最小。在本例中&#xff0c;样本点是指平面直角坐标系上的点&#xff0c;聚类中心也是平面直角坐标系上的点&#xff0c;而每个…

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

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

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

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

网络连接中的三次握手和四次挥手

三次握手和四次挥手都是TCP协议通信过程中建立和关闭连接的步骤。 三次握手的步骤如下&#xff1a; 客户端发送SYN包&#xff0c;进入SYN-SENT状态。服务器接收到SYN包&#xff0c;回复一个ACK包和一个SYN包&#xff0c;进入SYN-RECEIVED状态。客户端收到ACK包和SYN包&#x…

Fair原理篇Fair逻辑动态化架构设计与实现

本文的核心内容包括: 数据逻辑处理布局中的逻辑处理Flutter类型数据处理一、数据逻辑处理 我们接触的每一个Flutter界面,大多由布局和逻辑相关的代码组成。如Flutter初始工程的Counting Demo的代码: class _MyHomePageState extends State<MyHomePage> {// 变量 int…

OpenHarmony Meetup常州站招募令

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