【刷题汇总 -- 求最小公倍数、数组中的最长连续子序列、字母收集】

C++日常刷题积累

  • 今日刷题汇总 - day008
    • 1、求最小公倍数
      • 1.1、题目
      • 1.2、思路
      • 1.3、程序实现 -- 穷举法
      • 1.2、程序实现 -- 辗转相除法
    • 2、数组中的最长连续子序列
      • 2.1、题目
      • 2.2、思路
      • 2.3、程序实现
    • 3、字母收集
      • 3.1、题目
      • 3.2、思路
      • 3.3、程序实现
    • 4、题目链接

今日刷题汇总 - day008

1、求最小公倍数

1.1、题目

在这里插入图片描述

1.2、思路

读完题知道,需要完成求两个正整数的最小公倍数。那么A和B的最⼩公倍数的公式 = A*B/两者的最⼤公约数。而最⼤公约数:可以使用辗转相除法、穷举法、更相减损法和质因数分解法等。这里就使用最常用的穷举法和辗转相除法即可。接下来,就是程序实现。

1.3、程序实现 – 穷举法

穷举法就是如果大数可以整除小数,那么最大公约数为小数。如果不能整除小数,那么这两个数就按大到小依次对比小数小的数求余,遇到都能够整除的,就是最大公约数。

#include <iostream>
using namespace std;int main()
{int a, b;cin >> a >> b;int min = a>b ? a : b;int ret = 0;for(int i = 1;i <= min;i++){if(a%i == 0 && b%i == 0)ret = i;}cout << a*b/ret << endl;return 0;
}

在这里插入图片描述

在这里插入图片描述

1.2、程序实现 – 辗转相除法

辗转相除法就是用a对b求余,若余数为0,则除数b为最大公约数。若余数不为0,将此余数r作为新的除数,b作为新的被除数,重新求余,直到余数为0为止。此时的最大公约数为除数。

#include <iostream>
using namespace std;int gcd(int a,int b)
{if(b == 0)return a;return gcd(b,a%b);
}int main() {int a, b;cin >> a >> b;cout << a*b/gcd(a,b) << endl;return 0;
}

在这里插入图片描述

在这里插入图片描述

2、数组中的最长连续子序列

2.1、题目

在这里插入图片描述

2.2、思路

读完题,明白,让我们求无序数组中的连续序列的最大长度,并且连续可与位置无关。刚读完题就联想到感觉跟之前的字符串中找出连续最长的数字串思路类似的计数而已。那么这里先进行可以采用sort数组的排序,然后利用变量countlen记录更新长度,利用maxcount保留最大长度并最后返回,然后遍历数组,当相邻的元素是连续的就更新countlen长度,如果相邻的数值相同则越过继续判断下一位元素即可,最后遍历结束返回最大值maxcount,其中涉及一些细节处理,接下来,就是程序实现。

2.3、程序实现

首先,按照思路sort排序数组和定义好变量,然后写好遍历框架,然后只要响铃元素是连续或者相等的元素,则继续j++遍历,否则break即可,直到len结束while,进入下次循环前需要更新j = i+1重新从新的连续位置遍历,countlen = 1来重新计入countlen 大小其中注意无需i++,可以直接越过countlen。所以也可以得出,不需要每次都i++,可以直接越过countlen,避免重复判断比较操作。最后,得到的maxcount就是最大长度。

class Solution {
public:int MLS(vector<int>& arr){sort(arr.begin(),arr.end());int len = arr.size();int j = 0;int countlen = 1;int maxcount = 0;for(int i = 0;i < len; i+=countlen){j = i + 1;countlen = 1;while(j < len){if(arr[j] - arr[j-1] == 1){countlen++;j++;}else if(arr[j] - arr[j-1] == 0){j++;}else{break;}}maxcount = max(maxcount , countlen);}return maxcount;}
};

在这里插入图片描述

在这里插入图片描述

3、字母收集

3.1、题目

在这里插入图片描述

3.2、思路

读完题,知道让实现在n*m矩阵中,拼接或者搜索或者贪心收集,按照一定的规则走最优的路径使得获得的分数最多。那么这里使用推导dp动态规划思路,只要使用dp就得确定dp[i]动态表示和动态转移方程。由题目规则很容易想到:
dp[i][j]表示:到第i行j列的最大分数和;
那么推导状态转移方程就是:dp[i][j] = 由左边dp[i][j-1]或上方dp[i-1][j],再加上其分数得到;
即: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + score;值得注意的是,此题是从下标1开始的。那么接下来,就是程序实现。

3.3、程序实现

首先,按照题目要求和思路定义字符二维数组和dp数组,接着输入n*m二维数组,下标从1开始的。然后,定义score分数变量,接着遍历二维数组,判断并匹配字符是否为加分字符,累加到dp[i][j]中,最后输出dp[n][m]即可。

#include <iostream>
using namespace std;const int N = 501;
char ch[N][N];
int dp[N][N];int main() {int n,m;cin >> n >> m;for(int i = 1;i <= n;i++){for(int j = 1;j <= m;j++){cin >> ch[i][j];}}int score = 0;for(int i = 1;i <= n;i++){for(int j = 1;j <= m;j++){if(ch[i][j] == 'l')score = 4;else if(ch[i][j] == 'o')score = 3;else if(ch[i][j] == 'v')score = 2;else if(ch[i][j] == 'e')score = 1;elsescore = 0;dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + score;}}cout << dp[n][m] << endl;return 0;
}

在这里插入图片描述

在这里插入图片描述

4、题目链接

求最小公倍数
数组中的最长连续子序列
字母收集

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

02day-C++学习(const 指针与引用的关系 inline nullptr)

02day-C学习 1. 使用const注意事项 注意事项 • 可以引⽤⼀个const对象&#xff0c;但是必须⽤const引⽤。const引⽤也可以引⽤普通对象&#xff0c;因为对象的访 问权限在引⽤过程中可以缩⼩&#xff0c;但是不能放⼤。 • 不需要注意的是类似 int& rb a3; double d 1…

Mybatis Plus 3.X版本的insert填充自增id的IdType.ID_WORKER策略源码分析

总结/朱季谦 某天同事突然问我&#xff0c;你知道Mybatis Plus的insert方法&#xff0c;插入数据后自增id是如何自增的吗&#xff1f; 我愣了一下&#xff0c;脑海里只想到&#xff0c;当在POJO类的id设置一个自增策略后&#xff0c;例如TableId(value "id",type …

单对以太网连接器多场景应用

单对以太网连接器应用场景概述 单对以太网&#xff08;Single Pair Ethernet&#xff0c;简称SPE&#xff09;作为一种新兴的以太网技术&#xff0c;以其独特的优势在多个领域得到了广泛的应用。SPE通过单对电缆进行数据传输&#xff0c;支持高速数据传输&#xff0c;同时还能…

【python基础】—入门函数print()的参数解析及使用场景

文章目录 一、print()函数二、区隔符—sep三、结束符号—end四、内容写入文件—file五、缓冲输出设置—flush 一、print()函数 功能 print()函数就是把一个或多个对象转换为其文本表达式形式&#xff0c;然后发送给标准输出流或者类似的文件流。 语法 print(value, …, sep’ …

一行代码,开发项目使用阿里巴巴图标-暂存库

减少项目内存&#xff0c;适用于一切项目。防止你使用线上官网的图标&#xff0c;官网更新后&#xff0c;你项目中的图标也消失不能用。此外微信小程序代码上线2M&#xff0c;很实用。 把图标存在阿里巴巴图标库 如下图&#xff1a; 可以在这新建项目并上传项目需要的图标 …

移动公厕有无人显示屏为何多采用RS485、IO信号通讯方式

在户外活动、临时集会或是应急情况下&#xff0c;移动公厕作为解决人们生理需求的重要设施&#xff0c;发挥着不可替代的作用。然而&#xff0c;随着人口密度的增加和对公共卫生要求的提高&#xff0c;如何确保移动公厕的高效利用和良好维护&#xff0c;成为了组织者和管理者面…

《大语言模型的临床和外科应用:系统综述》

这篇题为《大语言模型的临床和外科应用&#xff1a;系统综述》的文章对大语言模型&#xff08;LLM&#xff09;目前在临床和外科环境中的应用情况进行了全面评估。 大语言模型&#xff08;LLM&#xff09;是一种先进的人工智能系统&#xff0c;可以理解和生成类似人类的文本。…

突破传统,实时语音技术的革命。Livekit 开源代理框架来袭

🚀 突破传统,实时语音技术的革命!Livekit 开源代理框架来袭! 在数字化时代,实时通信已成为我们日常生活的一部分。但你是否曾想象过,一个能够轻松处理音视频流的代理框架,会如何改变我们的沟通方式?今天,我们就来一探究竟! 🌟 什么是 Livekit 代理框架? Live…

比赛获奖的武林秘籍:05 电子计算机类比赛国奖队伍技术如何分工和学习内容

比赛获奖的武林秘籍&#xff1a;05 电子计算机类比赛国奖队伍技术如何分工和学习内容 摘要 本文主要介绍了在电子计算机类比赛中技术层面上的团队分工和需要学习的内容&#xff0c;分为了嵌入式硬件、嵌入式软件、视觉图像处理、机械、上位机软件开发和数据分析等六个方向&am…

iPhone短信被拉黑了怎么恢复?4步快速移除黑名单

在日常使用iPhone的过程中&#xff0c;可能会因为误操作或其他原因将某些联系人拉入黑名单&#xff0c;导致无法接收他们发送的短信。那么&#xff0c;iPhone短信被拉黑了怎么恢复&#xff1f; 其实&#xff0c;只需要简单的4步操作&#xff0c;就能快速将联系人移出黑名单&am…

【Java 的四大引用详解】

首先分别介绍一下这几种引用 强引用&#xff1a; 只要能通过GC ROOT根对象引用链找到就不会被垃圾回收器回收&#xff0c;当所有的GC Root都不通过强引用引用该对象时&#xff0c;才能被垃圾回收器回收。 软引用&#xff08;SoftReference&#xff09;&#xff1a; 当只有软引…

网站更新改版了

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;Leo杂谈 ✨特色专栏&#xff1a;MySQL学…

JVM原理(二四):JVM虚拟机锁优化

高效并发是从JDK 5升级到JDK 6后一项重要的改进项&#xff0c;HotSpot虛 拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术&#xff0c;如适应性自旋( Adaptive Spinning)、锁消除( Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locking)、…

Websocket 替代方案:如何使用 Firestore 监听实时事件

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 ​在现代 Web 开发中,实时更新功能对于许多应用程序(如聊天应用、协作工具和在线游戏)都是必不可少的。虽然 WebSocket 是一种常用的实时通信技术,但 Google 的 Firestore 也提供了一种强大的替代方案,使得实时监听变得…

AdaBoost集成学习算法理论解读以及公式为什么这么设计?

本文致力于阐述AdaBoost基本步骤涉及的每一个公式和公式为什么这么设计。 AdaBoost集成学习算法基本上遵从Boosting集成学习思想&#xff0c;通过不断迭代更新训练样本集的样本权重分布获得一组性能互补的弱学习器&#xff0c;然后通过加权投票等方式将这些弱学习器集成起来得到…

解析MySQL的数据类型:理解每种类型及其应用

MySQL是一种流行的关系型数据库管理系统&#xff0c;被广泛应用于Web应用开发中。在数据库设计的过程中&#xff0c;选择合适的数据类型至关重要&#xff0c;因为它不仅影响存储效率和数据完整性&#xff0c;还影响数据库操作的性能和查询速度。本文将详细介绍MySQL支持的各种数…

飞跃边界,尽在掌握 —— Jump Desktop 8 for Mac,远程工作新体验!

Jump Desktop 8 for Mac 是一款强大的远程桌面控制软件&#xff0c;专为追求高效工作与生活平衡的用户设计。它允许您轻松地从Mac设备上远程访问和控制另一台电脑或服务器&#xff0c;无论是跨房间、跨城市还是跨国界&#xff0c;都能实现无缝连接&#xff0c;仿佛操作就在眼前…

【Python实战因果推断】28_倾向分8

目录 Treatment Is Easy to Model Treatment Is Easy to Model 第一个例子中&#xff0c;治疗分配的模型相当容易建立&#xff0c;但干预结果的模型却比较复杂。具体来说&#xff0c;干预遵循伯努利分布&#xff0c;其概率由以下倾向得分给出&#xff1a; 如果您没有意识到&a…

单对以太网:工业4.0时代的通信革命

单对以太网连接器概述 单对以太网&#xff08;Single Pair Ethernet&#xff0c;简称SPE&#xff09;是一种新兴的以太网技术&#xff0c;它通过一对双绞线实现数据传输&#xff0c;支持PoDL&#xff08;Power over Data Line&#xff09;技术&#xff0c;为终端设备提供电力供…