力扣刷题总结 -- 数组28

82. 无法吃午餐的学生数量(简单)

题目要求:

学校的自助午餐提供圆形方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。
餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个里,每一轮:
如果队列最前面的学生喜欢栈顶的三明治,那么会拿走它并离开队列。
否则,这名学生会放弃这个三明治并回到队列的尾部
这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。

给你两个整数数组 students 和 sandwiches ,其中 sandwiches[i] 是栈里面第 i​​​​​​ 个三明治的类型(i = 0 是栈的顶部), students[j] 是初始队列里第 j​​​​​​ 名学生对三明治的喜好(j = 0 是队列的最开始位置)。请你返回无法吃午餐的学生数量。

题目分析:

根据题意,我们只需查看队列中与当前栈顶元素匹配的元素数量,而不用关心其先后顺序。如果队列中有元素与当前栈顶元素匹配,则队列中元素个数迟早会减1.按此方法遍历栈中元素,统计最终队列中两类元素的个数之和即可。

题目解答:

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>
#include <numeric>class Solution
{
public:int countStudents(vector<int>& students, vector<int>& sandwiches){int s1 = accumulate(students.begin(), students.end(), 0);  // 获取队列中0的个数int s0 = students.size() - s1;  // // 获取队列中1的个数for (int i = 0; i < sandwiches.size(); i++)  // 遍历栈{if (sandwiches[i] == 0 && s0 > 0){s0--;  // 吃不上饭的人数减1}else if (sandwiches[i] == 1 && s1 > 0){s1--;  // 吃不上饭的人数减1}else{break;}}return s0 + s1;}};int main()
{vector<int> students = { 1,1,0,0 };vector<int> sandwiches = { 0,1,0,1 };cout << "学生队列为:";for (int stu : students){cout << stu << ", ";}cout << endl;cout << "三明治栈为:";for (int san : sandwiches){cout << san << ", ";}cout << endl;Solution s;int res = s.countStudents(students, sandwiches);cout << "无法吃午餐的学生有" << res << "个" << endl;system("pause");return 0;
}

83. 卡车上的最大单元数(简单)

题目要求:

将一些箱子装在 一辆卡车上。给定一个二维数组 boxTypes ,其中 boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi] :

numberOfBoxesi 是类型 i 的箱子的数量。
numberOfUnitsPerBoxi 是类型 i 每个箱子可以装载的单元数量。
整数 truckSize 表示卡车上可以装载 箱子 的 最大数量 。只要箱子数量不超过 truckSize ,就可以选择任意箱子装到卡车上。

返回卡车可以装载单元的最大总数。

题目分析:

由于卡车容量有限,优先将装载单元多的箱子放上卡车,直至卡车达到最大容量即可。对boxTypes按照装载单元大小降序排列,再遍历即可。

题目解答:

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>class Solution
{
public:int maximumUnits(vector<vector<int>>& boxTypes, int truckSize){sort(boxTypes.begin(), boxTypes.end(), [](const vector<int> &a, const vector<int> &b){return a[1] > b[1];});  // 按照numberOfUnitsPerBox的大小对boxTypes进行重排序int res = 0;for (auto &boxType : boxTypes){int numberOfBoxes = boxType[0];  // 获取当前类箱子的数量int numberOfUnitsPerBox = boxType[1];  // 获取当前类每个箱子能够装载的单元数量if (numberOfBoxes < truckSize)  // 如果当前箱子数小于卡车容量{res += numberOfBoxes * numberOfUnitsPerBox;  // 累加装载的单元总数truckSize -= numberOfBoxes;  // 将卡车总容量减去已装载的箱子数}else{res += truckSize * numberOfUnitsPerBox;  // 如果当前类箱子的数量大于卡车剩下的容量,将卡车剩下容量和每箱单元数的乘积作为最后装载的单元总数break;}}return res;}
};int main()
{int truckSize = 4;vector<vector<int>>boxTypes = { {1,3}, {2,2}, {3,1} };cout << "货物情况如下:" << endl;for (auto &e : boxTypes){for (int num : e){cout << num << ", ";}cout << endl;}cout << endl;Solution s;int res = s.maximumUnits(boxTypes, truckSize);cout << "卡车可以装载的单元最大总数为:" << res << endl;system("pause");return 0;
}

84. 在既定时间做作业的学生人数(简单)

题目要求:

给定两个整数数组 startTime(开始时间)和 endTime(结束时间),并指定一个整数 queryTime 作为查询时间。

已知,第 i 名学生在 startTime[i] 时开始写作业并于 endTime[i] 时完成作业。

请返回在查询时间 queryTime 时正在做作业的学生人数。形式上,返回能够使 queryTime 处于区间 [startTime[i], endTime[i]](含)的学生人数。

题目分析:

法1:枚举法
遍历每个学生的startTime[i]和endTime[i],并判断是否startTime[i] ≤ queryTime ≤ endTime[i],如果是,ans+1。

法2:二分查找
设startTime[i] ≤ queryTime的学生集合为lessStart,设endTime[i] ≤ queryTime的学生集合为lessEnd,显然lessEnd ∈ lessStart,将lessStart减去lessEnd就得到符合题意的学生人数。

题目解答:

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>// 法1--枚举法
class Solution1
{
public:int busyStudent1(vector<int>& startTime, vector<int>& endTime, int queryTime){int n = startTime.size();int ans = 0;// 遍历数组,判断查询时间是否介于开始和结束时间之内for (int i = 0; i < n; i++){if (startTime[i] <= queryTime && endTime[i] >= queryTime){ans++;}}return ans;}};// 法2--二分查找法
class Solution2
{
public:int busyStudent2(vector<int>& startTime, vector<int>& endTime, int queryTime){// 对时间进行升序排序sort(startTime.begin(), startTime.end());sort(startTime.begin(), startTime.end());// upper_bound获取数组中第一个大于queryTime的值的位置int lessStart = upper_bound(startTime.begin(), startTime.end(), queryTime) - startTime.begin();// lower_bound获取数组中第一个大于等于queryTime的值的位置int lessEnd = lower_bound(endTime.begin(), endTime.end(), queryTime) - endTime.begin();return lessStart - lessEnd;}};int main()
{vector<int> startTime = { 1,2,3 };vector<int> endTime = { 3,2,7 };int queryTime = 4;Solution1 s1;Solution2 s2;cout << "开始学习的时间为:";for (int t : startTime){cout << t << ", ";}cout << endl;cout << "结束学习的时间为:";for (int t : endTime){cout << t << ", ";}cout << endl;cout << "查询时间为:" << queryTime << endl;int res1 = s1.busyStudent1(startTime, endTime, queryTime);int res2 = s2.busyStudent2(startTime, endTime, queryTime);cout << "法1得出的在既定时间工作的学生人数为:" << res1 << endl;cout << "法2得出的在既定时间工作的学生人数为:" << res2 << endl;system("pause");return 0;
}

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

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

相关文章

el-form-item的label设置两端对齐

<style scoped> ::v-deep .el-form-item__label {display: inline;text-align-last: justify; } </style>效果如图所示

数据分析必备:一步步教你如何用matplotlib做数据可视化(11)

1、Matplotlib 三维绘图 尽管Matplotlib最初设计时只考虑了二维绘图&#xff0c;但是在后来的版本中&#xff0c;Matplotlib的二维显示器上构建了一些三维绘图实用程序&#xff0c;以提供一组三维数据可视化工具。通过导入Matplotlib包中包含的mplot3d工具包&#xff0c;可以启…

双 μC 的 PWM 频率和分辨率

该方法是过滤 PWM 信号的 HF 分量&#xff0c;只留下与占空比成正比的 LF 或 DC 分量。然而&#xff0c;低通滤波器并不能完全滤除PWM频率&#xff0c;因此LF/DC信号一般会有一些纹波。 有两种方法可以降低 PWM DAC 的纹波。可以降低低通滤波器的截止频率&#xff0c;或者提高…

数据结构-顺序表的插入排序

顺序表的排序可以看作数组排序的拓展。基本逻辑和数组排序的逻辑大同小异。 由于顺序表中可以存放不同种的数据类型&#xff0c;进而和结构体排序又有相似之处。其中要注意的是&#xff08;->&#xff09;和&#xff08;.&#xff09;的区别。 -> 符号是针对指针进行的操…

「动态规划」如何求最长摆动子序列的长度?

376. 摆动序列https://leetcode.cn/problems/wiggle-subsequence/description/ 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也…

明白这6个阶段,让你开启从普通员工到管理岗的进阶之路

面对职场的晋升通道&#xff0c;转型管理岗是很多普通职场人实现职业转型的一个可选项。然而&#xff0c;这条道路并非一蹴而就&#xff0c;而是需要经过一系列的阶段和努力&#xff0c;明白这些阶段将有助于职场人顺利走上管理岗位。 一、自我管理阶段。在这一阶段&#xff0…

中文域名费用是多少?

随着互联网的全球化和本地化趋势&#xff0c;中文域名作为文化多样性的体现&#xff0c;越来越受到企业和个人的欢迎。中文域名不仅便于中国用户的记忆和输入&#xff0c;而且也有助于提升品牌的本地化形象。本文将深入探讨中文域名的费用构成&#xff0c;以及在购买中文域名时…

设计软件有哪些?贴图插件篇(2),渲染100邀请码1a12

这次我们继续介绍一些贴图插件。 1、Texporter Texporter是3ds Max的一个插件&#xff0c;用于快速导出贴图。它允许用户一次性导出多个贴图通道&#xff0c;如漫反射、法线、置换等&#xff0c;以各种格式&#xff0c;如TGA、BMP、JPEG等。Texporter提供了简单易用的界面和灵…

react-native在IOS上集成百度地图详解

export default class BaiDuMapTest extends Component { render() { return ( ); } } const styles StyleSheet.create({ container: { flex: 1, justifyContent: ‘center’, alignItems: ‘center’, backgroundColor: ‘#F5FCFF’, }, welcome: { fontSize:…

告别手动邮件处理:使用imbox库轻松管理你的收件箱

imbox库简介&#xff1a; imbox是一个强大的Python库,专为与IMAP服务器交互而设计.IMAP&#xff08;Internet Message Access Protocol&#xff09;是一种用于电子邮件的标准协议,允许用户在远程服务器上管理邮件.imbox库通过IMAP协议与邮件服务器通信,帮助用户轻松地读取、搜索…

在昇腾开发环境合并baichuan2-13B模型的lora文件

概述 别人使用lora的方式对baichuan2-13b的模型进行了微调训练&#xff0c;希望我能部署到mindie服务中。 lora微调后生成的文件如下&#xff1a; # ls checkpoint-lora adapter_config.json optimizer.pt rng_state.pth special_tokens_map.json tokenizer_conf…

只知道无人机能航拍,你已经out啦!!!

无人机行业应用相当广泛&#xff0c;涵盖了航拍、植保、测绘、巡检、安防、物流等多个领域。并且随着科技的不断发展&#xff0c;无人机技术也在不断创新和完善。无人机行业的应用具有多重优势&#xff0c;这些优势使得无人机在众多领域中得以广泛应用并取得显著的成效。 航拍…

【投稿优惠|权威主办】2024年图像、地质测绘与遥感技术国际学术会议(ICIGSRST 2024)

【投稿优惠|权威主办】2024年图像、地质测绘与遥感技术国际学术会议&#xff08;ICIGSRST 2024&#xff09; 2024 International Conference on Image, Geological Surveying and Remote Sensing Technology&#xff08;ICIGSRST 2024&#xff09; ▶会议简介 2024年图像、地质…

应用监控eBPF 版调研

参考&#xff1a; https://www.toutiao.com/article/7327353509735596559/?appnews_articletamp1717488680&use_new_style1&req_id20240604161119838096AAE4AD4F44788E&group_id7327353509735596559&wxshare_count1&tt_fromweixin&utm_sourceweixin&…

vue自定义指令在同一个页面生效一次

vue自定义指令在同一个页面生效一次&#xff0c;在使用自定义指令做el-sele下滑分页时遇到vue自定义指令只生效了一次&#xff0c;是因为放在了v-if中使用&#xff0c;换成v-show就好了

kafka集群生产性能调优业务场景

kafka集群生产性能调优业务场景 Kafka 集群的生产性能调优可以通过多种途径实现,包括硬件配置优化、Kafka 配置参数调优、客户端配置优化、操作 系统和网络配置优化等。以下是详细的调优途径和适用场景: 1. 硬件配置优化 1.1 磁盘 SSD:使用 SSD 而不是 HDD 来提高磁盘 I/…

毕昇jdk教程

毕昇jdk教程指南链接&#xff1a;Wiki - Gitee.com

springboot 网上商城系统-计算机毕业设计源码08789

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设网上商城系统。 本设…

算法课程笔记——点积叉积

算法课程笔记——点积叉积

Kotlin设计模式:享元模式(Flyweight Pattern)

Kotlin设计模式&#xff1a;享元模式&#xff08;Flyweight Pattern&#xff09; 在移动应用开发中&#xff0c;内存和CPU资源是非常宝贵的。享元模式&#xff08;Flyweight Pattern&#xff09;是一种设计模式&#xff0c;旨在通过对象重用来优化内存使用和性能。本文将深入探…