【每日一题】2024年3月汇编(上)

3.1【2369】检查数组是否存在有效划分

2369. 检查数组是否存在有效划分icon-default.png?t=N7T8https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/

1.这样的判断可以用动态规划来解决,用一个长度为(n+1) 的数组来记录  是否存在有效划分,dp[i] 表示前 i 个元素组成的数组是否至少存在一个有效划分。边界情况 dp[0] 恒为 true而 dp[n] 即为结果。

动态规划的公式为:

这道题目是一个简单的dp,经历了上个月树的一整个月的dfs,bfs的洗礼,盲猜这个月都是dp。

class Solution {
public:bool validPartition(vector<int>& nums) {int n = nums.size();vector<int> dp(n + 1,0);dp[0] = true;for(int i = 1; i <= n; i++){if(i >= 2){dp[i] = dp[i - 2] && validTwo(nums[i - 1],nums[i - 2]);}if(i >= 3){dp[i] = dp[i] || dp[i -3] && validThree(nums[i -3], nums[i -2],nums[i - 1]);}}return dp[n];}bool validTwo(int num1,int num2){return num1 == num2;}bool validThree(int num1, int num2, int num3){return (num1 == num2 && num2 == num3) || (num1 + 1 == num2 && num2 + 1 == num3);}
};

3.2【2368】受限条件下可能达到的节点数目

2368. 受限条件下可到达节点的数目icon-default.png?t=N7T8https://leetcode.cn/problems/reachable-nodes-with-restrictions/

没想到今天的题目又回到了树的遍历问题,和上个月的一道题很像,是一个求邻接表然后进行dfs的题目

  1. 对于lamda表达式:捕获列表(Capture List)[&],这表示以引用的方式捕获外部变量。参数列表(Parameter List)(int x, int f),这是lambda函数接受的两个整数参数。返回类型:这里返回类型为 void,由于使用了 function<void(int,int)> 进行了明确的类型声明。

  2.  lamda表示式定义的第二个参数是为了,遍历的时候不往回找,一直往下找。
  3. 临近表的操作定义二维数组存储即可,做限制的函数一维数组置1即可。
class Solution {
public:int reachableNodes(int n, vector<vector<int>>& edges, vector<int>& restricted) {//邻接表vector<vector<int>> g(n);for(auto &v : edges){g[v[0]].push_back(v[1]);g[v[1]].push_back(v[0]);}//做限制vector<int> isrestricted(n);for(auto &x : restricted){isrestricted[x] = 1;}int cnt = 0; function<void(int,int)> dfs = [&](int x,int f){cnt ++;for(auto &y : g[x]){if(y != f && !isrestricted[y])dfs(y,x);}};dfs(0,-1);return cnt;}
};

3.3【225】用队列实现栈

225. 用队列实现栈icon-default.png?t=N7T8https://leetcode.cn/problems/implement-stack-using-queues/

easy题目,熟悉队列基本操作,还有拓展准备一下一个队列的解法

 方法一:两个队列(O(1))

class MyStack {
public:queue<int> q1;queue<int> q2;MyStack() {}void push(int x) {q2.push(x);while(!q1.empty()){q2.push(q1.front());q1.pop();}swap(q1,q2);}int pop() {int r = q1.front();q1.pop();return r;}int top() {return(q1.front());}bool empty() {return(q1.empty());}
};

*方法二 一个队列(O(n))

queue<int> q1;MyStack() {}  void push(int x) {int n = q1.size();q1.push(x);for(int i = 0; i < n; i++){q1.push(q1.front());q1.pop();}

3.4【232】用栈实现队列

232. 用栈实现队列icon-default.png?t=N7T8https://leetcode.cn/problems/implement-queue-using-stacks/

较为简单,双栈实现队列的push,pop等工作

class MyQueue {
public:stack<int> instack,oustack;MyQueue() {}void push(int x) {instack.push(x);}int pop() {if(oustack.empty()){while(!instack.empty()){oustack.push(instack.top());instack.pop();}}int r =  oustack.top();oustack.pop();return r;}int peek() {if(oustack.empty()){while(!instack.empty()){oustack.push(instack.top());instack.pop();}}return oustack.top();}bool empty() {return(instack.empty() && oustack.empty());}
};/*** Your MyQueue object will be instantiated and called as such:* MyQueue* obj = new MyQueue();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->peek();* bool param_4 = obj->empty();*/

3.6【2917】找出数组中的k-or值

2917. 找出数组中的 K-or 值icon-default.png?t=N7T8https://leetcode.cn/problems/find-the-k-or-of-an-array/

题目难以理解什么意思,主要是按照给的范围遍历位运算

由于给定了nums中元素的范围,我们位从1到31遍历,每一次循环右移i位与1按位与,就是最后一位和1与,记录数目。如果说大于给定的k,对于这个第i位,1向左移动i位和ans按位或 。

class Solution {
public:int findKOr(vector<int>& nums, int k) {int ans = 0;for(int i = 0; i < 31; i++)
{int cnt = 0;;for(int num: nums){if(num >> i & 1 ){cnt ++;}}if(cnt >= k){ans |=  1<<i;}
}    
return ans;
}
};

3.8【2834】找出美丽数组的最小和

2834. 找出美丽数组的最小和icon-default.png?t=N7T8https://leetcode.cn/problems/find-the-minimum-possible-sum-of-a-beautiful-array/

作一个贪心,卡住范围,整体思路就不难了

  1. 分析题目,按照贪心,要最小和,所以从1开始,按顺序递增的加,但是到二分之target就不能取了,然后就从target依次往后取。
  2.  根据等差数列求和公式就可以解决
  3. 注意int不行,要给个long long防止溢出
class Solution {
public:int minimumPossibleSum(int n, int target) {const int mod = 1e9 + 7;int m = target / 2;if(n <= m){return (long long)(1 + n) * n / 2 % mod;}else{return ((long long)(1 + m) * m /2 + ((long long)target + target + (n - m) - 1) * (n - m) /2) % mod;}}
};

3.10【299】猜数字游戏

299. 猜数字游戏icon-default.png?t=N7T8https://leetcode.cn/problems/bulls-and-cows/

今天的题目其实就是一个模拟,熟悉数组存储数据个数。

 先把猜对的对应上的数字记录下来,然后如果不对应,用两个数组全部对应,我一开始的思路是先把对应的记录下来,然后删除再去比其他的就要麻烦不少。

用两个数组记录其他的地方出现的数字的个数,最后再通过min,找出猜对了,但是位置不对的个数。

class Solution {
public:string getHint(string secret, string guess) {int bulls = 0;vector<int> cntS(10),cntG(10);for(int i = 0; i < secret.size(); i++){if(secret[i] == guess[i]) {bulls++;}else{++cntG[secret[i] - '0'];++cntS[guess[i] - '0'];}}int cows = 0;for(int i = 0; i < 10;i++){cows += min(cntS[i],cntG[i]);}return to_string(bulls) + 'A' + to_string(cows) + 'B';}
};

3.11【2129】将标题首字母大写

2129. 将标题首字母大写icon-default.png?t=N7T8https://leetcode.cn/problems/capitalize-the-title/

看题目知道是一个模拟题,大小写转换比较经典,如果用c++的话,一句话一句话的模拟会发现确实很麻烦,题解中用到一个l,一个r指向每一个单词的前后端,思路更为清晰

  1.  toupper,tolower大小写字母转换
  2. 整体思路,while大循环,tittle后边加个空格,防止结尾不同处理。先把r移动到单词的最右边 ,判断单词个数是否需要首字母置为大写,再所有的字母置为小写,最后把最后的空格删掉
class Solution {
public:string capitalizeTitle(string title) {int l = 0,r = 0;int n = title.size();title.push_back(' ');while(r < n){while(title[r] != ' '){r ++;}if(r - l > 2){title[l] = toupper(title[l]);++l;}while(l < r){title[l] = tolower(title[l]);++l;}l = r + 1;++r;}title.pop_back();return title;}
};

3.12【1261】在受污染的二叉树中查找元素

1261. 在受污染的二叉树中查找元素icon-default.png?t=N7T8https://leetcode.cn/problems/find-elements-in-a-contaminated-binary-tree/

DFS+哈希表,还原二叉树以后,找target的个数是否大于0
  1.  用DFS还原二叉树,再判断个数,难度不大
class FindElements {
public:unordered_set<int> valSet;void dfs(TreeNode* node,int val){if(!node){return;}node -> val = val;valSet.insert(val);dfs(node -> left,val * 2 + 1);dfs(node -> right,val * 2 + 2);}FindElements(TreeNode* root) {dfs(root,0);}bool find(int target) {return valSet.count(target) > 0;}
};

3.13【2864】最大二进制奇数

2864. 最大二进制奇数icon-default.png?t=N7T8https://leetcode.cn/problems/maximum-odd-binary-number/

复刷指数:0

简单题,直接模拟

class Solution {
public:string maximumOddBinaryNumber(string s) {int sum = 0;for(int i = 0; i < s.size(); i++){if(s[i] == '1'){sum++;}}string s1;for(int i = 0; i < sum - 1 ;i++){s1.push_back('1');}for(int i = 0; i < s.size() - sum; i++){s1.push_back('0');}s1.push_back('1');return s1;}
};

3.14【2789】合并后数组的最大元素

2789. 合并后数组中的最大元素icon-default.png?t=N7T8https://leetcode.cn/problems/largest-element-in-an-array-after-merge-operations/

复刷指数:1

倒叙遍历+贪心。难度不大

  1. 我们从后往前倒序遍历一次数组,依次比较两个相邻的元素,如果两个相邻的元素能够合并,就将其合并。如果不能合并,就继续往前判断。因为这样的操作流程,在比较过程中,靠后的数是所有操作流程可能性中能产生的最大值,而靠前的数,是所有操作流程可能性中能产生的最小值。如果在遍历过程中,比较的结果是不能合并,那么其他任何操作流程都无法合并这两个数。如果可以合并,那我们就贪心地合并,因为这样能使接下来的比较中,靠后的数字尽可能大。

class Solution {
public:long long maxArrayValue(vector<int>& nums) {long long sum = nums.back();for(int i = nums.size() - 2; i >= 0; i--){sum = nums[i] <= sum ? nums[i] + sum : nums[i];}return sum;}
};

3.16【2684】矩阵中移动的最大次数

2684. 矩阵中移动的最大次数icon-default.png?t=N7T8https://leetcode.cn/problems/maximum-number-of-moves-in-a-grid/

两轮遍历,注意限制索引

  1. 如果满足要求就让ans等于列数,如果不满足,就把这个地方设为最大值,后边都不会比他大了
  2.  从第一列开始遍历,因为和前面一列进行比较,这个方法主要是因为搜索过程只能前进不能后退
class Solution {
public:int maxMoves(vector<vector<int>>& grid) {int m = grid.size();int n = grid[0].size();int ans = 0;for(int i = 1; i < n; i++){//列for(int j = 0; j < m; j++){if(grid[j][i] > grid[j][i - 1] || j > 0 && grid[j][i] > grid[j-1][i -1] ||j + 1 < m && grid[j][i] > grid[j + 1][i -1]){//限制索引ans = i;}else{grid[j][i] = INT_MAX;}}}return ans;}
};

3.17【310】最小高度树

310. 最小高度树icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-height-trees/

复刷指数:5

很漂亮的一道题,难度已经是中等题的天花板,是一个从外向内部剥菜的思想,内嵌BFS

 

  1. 核心思想:最矮树的根一定不是入度为1的点(画图看下,很容易证明),把最矮树的叶子节点全部减掉,剩下的仍然是最矮树。所以对一个图,不断的把它的叶子节点减掉,减到最后剩下的就一定是最矮树的根。
  2. 普通思想就是BFS遍历每一个节点,统计每个节点的高度,用map存储起来,查询高度集合中最小的,但是会超时。我们从边缘开始,先找到所有出度为1的节点,然后把所有出度为1的节点进队列,然后不断地bfs,最后找到的就是两边同时向中间靠近的节点,那么这个中间节点就相当于把整个距离二分了,那么它当然就是到两边距离最小的点啦,也就是到其他叶子节点最近的节点了。
class Solution {
public:vector<int> findMinHeightTrees(int n, vector<vector<int>>& edges) {vector<int> res;if(n == 1){res.push_back(0);return res;}
//      建立度的表vector<int> degree(n,0);vector<vector<int>> map (n,vector<int>());for(auto &edge : edges){degree[edge[0]]++;degree[edge[1]]++;map[edge[0]].push_back(edge[1]);map[edge[1]].push_back(edge[0]);}
//      建立队列,把度为1的点扔进去开始剥皮queue<int> q;for(int i = 0; i < n; i++){if(degree[i] == 1) {q.push(i);}}while(!q.empty()){res.clear();//我们每次要清空,这样最后就剩下最小高度树了int size = q.size();for(int i = 0; i < size; i++){int cur = q.front();q.pop();res.push_back(cur);//把所有当前节点加入结果集vector<int> neighbors = map[cur];//用一个数组接一下//经典BFSfor(int neighbor : neighbors){degree[neighbor] --;if(degree[neighbor] == 1){q.push(neighbor);}}}}return res;}
};

 

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

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

相关文章

Bean的作用域、Bean的自动装配、注解自动装配 (Spring学习笔记五)

1、Bean 的作用域 官网上显示有六种 1、Bean的作用域默认的是singleton&#xff08;单例模式的实现&#xff09; 也可以显示的设置&#xff08;单例模式的实现&#xff09; <!--用scope可以设置Bean的作用域--><bean id"user2" class"com.li.pojo.Us…

NCV8705MTADJTCG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV8705 是一款低噪音、低功耗和低泄漏线性电压稳压器。该器件具有卓越的噪音和 PSRR 规格&#xff0c;适用于使用视频接收器、成像传感器、音频处理器或需要外部洁净电源的任何部件的产品。NCV8705 使用创新的自适应接地电流电路 可确保轻负载调节下的超…

http请求方法15种,附图可以下载保存备查。

一、http请求组成和流程 HTTP请求是客户端&#xff08;如浏览器&#xff09;向服务器发送的请求&#xff0c;以获取特定资源或执行特定操作。HTTP请求由以下几个部分组成&#xff1a; 请求行&#xff1a;包含请求方法、请求的URL和HTTP协议版本。常见的请求方法有GET、POST、P…

数据结构的概念大合集01(含数据结构的基本定义,算法及其描述)

概念大合集01 1、数据结构基础的定义2、数据结构2.1 数据元素之间关系的集合2.2数据结构的三要素2.2.1数据的逻辑结构2.2.2数据的存储&#xff08;物理&#xff09;结构2.2.3数据的运算 3、数据类型4、抽象数据类型类型&#xff08;ADT&#xff09;5、算法及其描述5.1算法的5个…

Qt文件以及文件夹相关类(QDir、QFile、QFileInfo)的使用

关于Qt相关文件读写操作以及文件夹的一些知识&#xff0c;之前也写过一些博客&#xff1a; Qt关于路径的处理&#xff08;绝对路径、相对路径、路径拼接、工作目录、运行目录&#xff09;_qt 相对路径-CSDN博客 C/Qt 读写文件_qt c 读取文本文件-CSDN博客 C/Qt读写ini文件_…

Docker学习之数据管理(超详解析)

Docker存储资源类型&#xff1a; 用户在使用 Docker 的过程中&#xff0c;势必需要查看容器内应用产生的数据&#xff0c;或者需要将容器内数据进行备份&#xff0c;甚至多个容器之间进行数据共享&#xff0c;这必然会涉及到容器的数据管理&#xff1a; &#xff08;1&#xff…

(含代码)利用NVIDIA Triton加速Stable Diffusion XL推理速度

在 NVIDIA AI 推理平台上使用 Stable Diffusion XL 生成令人惊叹的图像 扩散模型正在改变跨行业的创意工作流程。 这些模型通过去噪扩散技术迭代地将随机噪声塑造成人工智能生成的艺术&#xff0c;从而基于简单的文本或图像输入生成令人惊叹的图像。 这可以应用于许多企业用例&…

【剑指offer--C/C++】JZ25 合并两个排序的链表

题目 思路 这个题目大逻辑比较简单&#xff0c;就是一个比较和穿插&#xff0c;但细节上要考虑清楚&#xff0c;可以画个图模拟一下。我这里是设置将两个链表拆开组成一个新的链表&#xff0c;这样不需要占用新的空间。两个指针对应节点的值进行比较&#xff0c;那个节点值较小…

【Stable Diffusion】入门-03:图生图基本步骤+参数解读

目录 1 图生图原理2 基本步骤2.1 导入图片2.2 书写提示词2.3 参数调整 3 随机种子的含义4 拓展应用 1 图生图原理 当提示词不足以表达你的想法&#xff0c;或者你希望以一个更为简单清晰的方式传递一些要求的时候&#xff0c;可以给AI输入一张图片&#xff0c;此时图片和文字是…

数据可视化学习:Matplotlib概述

一、图表的常用设置 1.基本绘图主要函数 (1).matplotlib.pyplot.plot(x,y,format_string,**kwargs) 2.参数说明 (1).x:x轴数据 (2).y:y轴数据 (3).format_string:控制曲线格式的字符串&#xff0c;包括颜色、线条样式和标记样式 (4)**kwargs:键值参数&#xff0c;相当于…

基础知识学习 -- qnx 系统

QNX是一个基于优先级抢占的系统。 这也导致其基本调度算法相对比较简单。因为不需要像别的通用操作系统考虑一些复杂的“公平性”&#xff0c;只需要保证“优先级最高的线程最优先得到 CPU”就可以了。 基本调度算法 调度算法&#xff0c;是基于优先级的。QNX的线程优先级&a…

VS调试快捷键

VS调试快捷键 4. VS调试快捷键4.1 环境准备4.2 调试快捷键调试最常使⽤的⼏个快捷键&#xff1a; 4. VS调试快捷键 那程序员怎么调试代码呢&#xff1f; 4.1 环境准备 首先是环境的准备&#xff0c;需要⼀个支持调试的开发环境&#xff0c;我们上课使用VS&#xff0c;应该把…

Magical Combat VFX

这个包包含30个可供游戏使用的VFX,有各种口味,为您的游戏增添趣味! 所有VFX都经过了很好的优化,可以在所有平台上使用。 这个包特别有一堆闪电魔法,有两种主要的变体,一种是深色的,另一种是浅色的。但它也提供了一系列其他视觉效果,如神圣咒语、音乐主题等等! 我们提供…

fetch,前端 面试题

Fetch Fetch API 是近年来被提及将要取代XHR的技术新标准&#xff0c;是一个 HTML5 的 API。 基于promise的设计&#xff0c;返回的是Promise对象 fetch()采用模块化设计&#xff0c;API 分散在多个对象上&#xff08;Response 对象、Request 对象、Headers 对象&#xff09;…

如何在webapp中于动发布一个应用

目录 第一步&#xff1a;在webapp文件夹内自定义文件夹第二步&#xff1a;生成一个文本&#xff0c;并把后缀改为 .html第三步&#xff1a;进入bin文件夹打开服务第四步&#xff1a;打开方式选择java第六步&#xff1a;输入你想输出的东西第七步&#xff1a;双击运行即可 第一步…

mybatis-plus笔记1

mybatis-plus笔记1 mybatis-plus快速入门基于Mapper接口的crud增强基于service的crud分页查询分页添加到自定义方法queryWrapper简单使用使用细节 updateWrapperlambdaWrapper mybatis-plus快速入门 pom.xml文件中导入相关依赖 application.yaml配置文件 MainApplication.java…

使用Java Runtime执行docker下的mysqldump

Runtime直接使用 docker exec mysql mysqldump -u%s -p%s cblog > %s&#xff08;%s是需要填充的数据&#xff09;&#xff0c;命令无法执行并且不会报错&#xff0c;需要使用字符串数组加入"sh", “-c”&#xff0c;具体代码示例&#xff1a; /*** MySQL数据备份…

KubeSphere 社区双周报|2024.02.29-03.14

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2024.02.29-03.14…

vue 记录一个echarts页面 单色环形饼图 多色环形饼图 柱状图加折线图 饼状图 双柱状图 雷达图 多色堆叠柱状图

“设备使用”模块没有做 因为项目不需要 仅自己记录使用 可供参考 那么上代码 <template><!--app-container--><div class"home-wrap"><div class"wrap" v-if"schoolId"><!--第一块--><div class"statis…

MongoDB从0到1:高效数据使用方法

MongoDB&#xff0c;作为一种流行的NoSQL数据库。从基础的文档存储到复杂的聚合查询&#xff0c;从索引优化到数据安全都有其独特之处。文末附MongoDB常用命令大全。 目录 1. 引言 MongoDB简介 MongoDB的优势和应用场景 2. 基础篇 安装和配置MongoDB MongoDB基本概念 使…