力扣题目训练(21)

2024年2月14日力扣题目训练

  • 2024年2月14日力扣题目训练
    • 605. 种花问题
    • 617. 合并二叉树
    • 628. 三个数的最大乘积
    • 289. 生命游戏
    • 299. 猜数字游戏
    • 149. 直线上最多的点数

2024年2月14日力扣题目训练

2024年2月14日第二十一天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道。惰性太强现在才完成,不过之后我会认真完成的,我会慢慢补回来,争取一天发两篇,把之前的都补上。

605. 种花问题

链接: 种花问题
难度: 简单
题目:
题目描述
运行示例:
运行示例

思路:
这道题可以采用贪心策略完成。我们需要在不打破种植规则的情况下在花坛内种入 n朵花,那么我们需要在不打破种植规则的情况下种入尽可能多的花,然后判断可以种入的花的最多数量是否大于或等于 n。我们需要判断在已经有花的范围内还能种多少花。
代码:

class Solution {
public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {int count = 0;int m = flowerbed.size();int pre = -1;for(int i = 0; i < m; i++){if(flowerbed[i] == 1){if(pre < 0){count += i/2;}else{count += (i - pre - 2) / 2;}if(count >= n) return true;pre = i;}}if(pre < 0){count += (m+1)/2;}else{count += (m - pre - 1)/2;}return count >= n;}
};

617. 合并二叉树

链接: 合并二叉树
难度: 简单
题目:
题目描述
运行示例:
运行示例
思路:
这道题我们可以看就是利用遍历然后对对应位置的值进行相加即可,我们可以采用深度优先遍历和广度优先遍历,我采用深度优先遍历。
代码:

class Solution {
public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if(root1 == NULL) return root2;if(root2 == NULL) return root1;TreeNode* newroot = new TreeNode(root1->val + root2->val);newroot->left = mergeTrees(root1->left,root2->left);newroot->right = mergeTrees(root1->right,root2->right);return newroot;}
};

628. 三个数的最大乘积

链接: 最大乘积
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题就是排序,然后找三个数相乘最大,若全是正数肯定是最大的三个数相乘,但是注意如果有负数的话,两个最小负数与最大正数相乘也可能是最大。
代码:

class Solution {
public:int maximumProduct(vector<int>& nums) {sort(nums.begin(),nums.end());int n = nums.size();return max(nums[0] * nums[1] * nums[n - 1], nums[n - 3] * nums[n - 2] * nums[n - 1]);}
};

289. 生命游戏

链接: 生命游戏
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题我们可以复制原数组,利用复制后的数组来修改现在数组的状态。
代码:

class Solution {
public:void gameOfLife(vector<vector<int>>& board) {int neighbors[3] = {0, 1, -1};int rows = board.size();int cols = board[0].size();vector<vector<int> >copyBoard(rows, vector<int>(cols, 0));for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {copyBoard[row][col] = board[row][col];}}for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {int liveNeighbors = 0;for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (!(neighbors[i] == 0 && neighbors[j] == 0)) {int r = (row + neighbors[i]);int c = (col + neighbors[j]);if ((r < rows && r >= 0) && (c < cols && c >= 0) && (copyBoard[r][c] == 1)) {liveNeighbors += 1;}}}}  if ((copyBoard[row][col] == 1) && (liveNeighbors < 2 || liveNeighbors > 3)) {board[row][col] = 0;}if (copyBoard[row][col] == 0 && liveNeighbors == 3) {board[row][col] = 1;}}}}
};

299. 猜数字游戏

链接: 猜数字游戏
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题就是利用遍历,然后统计出错的个数以及正确的个数。
代码:

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

149. 直线上最多的点数

链接: 直线上最多的点数
难度: 困难
题目:
题目描述

运行示例:
运行示例

思路:
这道题我们就是可以利用枚举,我们找任意两点构成直线,看其他点是否共线。改进的话就是利用哈希表记录所有共线的斜率情况。
代码:

class Solution {
public:int maxPoints(vector<vector<int>>& points) {int ans = 2;if(points.size() == 1) return 1;for(int i = 0; i < points.size()-1; i++){vector<int> pointa = points[i];for(int j = i+1; j < points.size(); j++){vector<int> pointb = points[j];int number = 2;for(int k = 0; k < points.size() && k!=i && k!= j;k++){vector<int> pointc = points[k];int s1 = (pointb[1] - pointa[1])*(pointc[0]-pointa[0]);int s2 = (pointc[1] - pointa[1])*(pointb[0]-pointa[0]);if(s1 == s2) number++;}ans = max(ans,number);}}return ans;}
};

改进

class Solution {
public:int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}int maxPoints(vector<vector<int>>& points) {int ans = 1;if(points.size() == 1) return 1;for(int i = 0; i < points.size(); i++){vector<int> pointa = points[i];unordered_map<string,int>map;int maxv = 0;for(int j = i+1; j < points.size(); j++){vector<int> pointb = points[j];int s1 = pointb[1] - pointa[1];int s2 = pointb[0] - pointa[0];int k = gcd(s1, s2);string key = to_string(s1 / k) + "_" + to_string(s2 / k);map[key]++;maxv = max(maxv,map[key]);}ans = max(ans,maxv+1);}return ans;}
};

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

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

相关文章

Docker安装蜜罐Hfish

前言 无意中发现公司的一台服务器被爆破&#xff0c;修改了密码&#xff0c;为了确定内网是否安装需要搭建一个蜜罐来看一下是否存在隐患。 如何安装Docker&#xff0c;请查看我另一篇文章 https://blog.csdn.net/l1677516854/article/details/136751211 一、拉取镜像 dock…

dockers拉取MySQL及Redis并挂载文件

目录 一 . MySQL拉取 1、进入 MySQL 容器内部。 2、登录 MySQL。 3、修改远程连接 4、刷新 二 . Redis拉取 1 . redis/conf中新建文件redis.conf&#xff0c;内容如下&#xff1a; 2 . 容器运行 一 . MySQL拉取 docker run -d --restartalways --name mysql \ -v /…

HTML、XHTML和HTML5系列对比

目录 HTML HTML的优点&#xff1a; HTML的缺点&#xff1a; 应用场景&#xff1a; XHTML XHTML的优点&#xff1a; XHTML的缺点&#xff1a; 应用场景&#xff1a; HTML5 HTML5的优点&#xff1a; HTML5的缺点&#xff1a; 应用场景&#xff1a; 回首发现&#xff0…

算法刷题Day11 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

目录 0 引言1 有效的括号1.1 我的解题 2 删除字符串中的所有相邻重复项2.1 我的解题 3 逆波兰表达式求值3.1 我的解题 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;❣️ 寄语&#xff1a;书到用时方恨少…

Spring中使用内置的tomcat容器启动后自动退出问题解决方法

在Spring中使用内置的tomcat 启动后自动退出 退出代码为0 且不报任务错误的解决方法. 日志如下: Connected to the target VM, address: 127.0.0.1:51129, transport: socket 三月 15, 2024 11:55:00 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing Proto…

Linux下安装多个nodejs并映射Jenkins

背景 需要Jenkins中切换多个Node&#xff0c;比如nodejs16和nodesjs18,所以在宿主机按照好这两个版本&#xff0c;然后再映射到Jenkins容器中 步骤 1.下载地址 https://nodejs.org/dist/ 放到 cd /opt/soft/2.解压 tar -xzvf node-v16.20.0-linux-x64.tar.gz tar -xzvf n…

【IC设计】Verilog线性序列机点灯案例(一)(小梅哥课程)

文章目录 设计目标思路仿真结果时间点一&#xff1a;201ns时间点二&#xff1a;220ns时间点三&#xff1a;250,000,220ns时间点四&#xff1a;1,000,000,200ns时间点五&#xff1a;1,000,000,220ns 总结&#xff1a; 案例和代码来自小梅哥课程&#xff0c;本人仅对知识点做做笔…

【ansible】ansible的介绍和安装

前言运维自动化 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代码管理&#xff08;SCM&#xff09;&#xff1a;GitHub、GitLab、BitBucket、SubVersion 构建工具&#xff1a;maven、Ant、Gradle 自动部署&#xff1a;Capistrano、CodeDeploy 持续…

代码+视频,R语言使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间

bootstrap自采样目前广泛应用与统计学中&#xff0c;其原理很简单就是通过自身原始数据抽取一定量的样本&#xff08;也就是取子集&#xff09;&#xff0c;通过对抽取的样本进行统计学分析&#xff0c;然后继续重新抽取样本进行分析&#xff0c;不断的重复这一过程N&#xff0…

针对BSV区块链新推出的网络访问规则NAR和警报系统AS的解释与问答

​​发表时间&#xff1a;2024年2月22日 BSV区块链社区团队最近开设了一个Twitter&#xff08;X&#xff09;话题空间&#xff0c;讨论BSV区块链协会最新推出的网络访问规则和警报系统的相关问题。 本次讨论由BSV区块链社区负责人Brett Banfe主持&#xff0c;以便社区成员更好…

【PTA】L1-039 古风排版(C++)

题目链接&#xff1a;L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn) 目录&#xff1a; 目录&#xff1a; 题目要求&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 测试结…

AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。

AMRT3D 一、概述 1、提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能&#xff0c;并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 2、轻量化技术应用与个性化定制 AMRT3D适用于快速开…