当前位置: 首页 > backend >正文

笔试专题(十二)

文章目录

  • 主持人调度
    • 题解
    • 代码
  • 小红的ABC
    • 题解
    • 代码
  • 不相邻取数
    • 题解
    • 代码
  • 空调遥控
    • 题解
    • 代码

主持人调度

题目链接
在这里插入图片描述

题解

1. 排序
2. 先按左端点的大小进行排序,保证时间是连续的,如果后一个点的左端点大于等于前一个点的右端点就是和法的,否则就不合法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码

class Solution 
{
public:bool hostschedule(vector<vector<int>>& s) {// 按照左端点排序// 这个二维的数组是按左端点排序的sort(s.begin(),s.end());// 排序为了保证时间段时连续的// 二维的vector是先按第一个元素排序,再按第二个元素排序的int k = s[0][1];int p = 0,q = 0;int n = s.size(),m = 2;for(int i = 1;i < n;i++){for(int j = 0;j < m;j++){if(j == 0) p = s[i][j];// 左端点if(j == 1) q = s[i][j];// 右端点}if(p >= k){k = q;}else {return false;}}return true;}
};

小红的ABC

题目链接
在这里插入图片描述

题解

1. 找规律
2. 最短就是2或者3的情况,其他情况的子集也是2或者3

在这里插入图片描述

代码

#include<iostream>
#include<string>
using namespace std;int main()
{string s;cin >> s;int n = s.size();int ans = -1;// 没有回文子串for(int i = 0;i < n;i++){if(i + 1 < n && s[i] == s[i+1]){ans = 2;break;}if(i + 2 < n && s[i] == s[i+2]){ans = 3;}}cout << ans << '\n';return 0;
}

不相邻取数

题目链接
在这里插入图片描述

题解

1. 动态规划,线性dp
2. 类似于打家劫舍问题,简单多状态,一个位置选或者不选
在这里插入图片描述

代码

#include <iostream>
#include<algorithm>
using namespace std;const int N = 2e5 + 10;
int a[N];
int f[N];
int g[N];int main()
{int n;cin >> n;for(int i = 0;i < n;i++) cin >> a[i];f[0] = a[0];for(int i = 1;i < n;i++){f[i] = a[i] + g[i-1];g[i] = max(g[i-1],f[i-1]);}cout << max(f[n-1],g[n-1]) << '\n';return 0;
}

空调遥控

题目链接

在这里插入图片描述

题解

1. 排序 + 二分
2. 先枚举温度,最小的温度到最大的温度,再写出该温度的范围是k+p和k-p是符合要求的区间,再用二分查找找到左端点的下标和右端点的下标+1即是此次温度的最多人数,最后求最多的人数
3. 滑动窗口 + 排序
温度的范围是[t - p,t + p],那么一定存在一个区间内的最大数 - 最小数 <= 2 * p,求区间的最长的长度

在这里插入图片描述

代码

// 排序 + 二分 O(n*logn + n*logn)
#include<iostream>
#include<algorithm>
using namespace std;const int N = 1e6 + 10;
int a[N];
int p,n;int main()
{cin >> n >> p;for(int i = 0;i < n;i++) cin >> a[i];// 排序 + 二分sort(a,a + n);int b = a[0],c = a[n-1];int ans = 0;// 枚举温度for(int i = b;i <= c;i++){int left = 0,right = n-1;int t1 = i + p;int t2 = i - p;int p1 = 0,p2 = 0;while(left < right){int mid = left + (right - left) / 2;if(a[mid] >= t2) right = mid;else{left = mid + 1;    }}p1 = left;left = 0,right = n - 1;while(left < right){int mid = (left + right + 1) / 2;if(a[mid] <= t1) left = mid;else right = mid - 1;}p2 = left;ans = max(ans,p2-p1 + 1);}cout << ans << '\n';return 0;
}// 滑动窗口 + 排序 O(n*logn + n)
#include<iostream>
#include<algorithm>
using namespace std;const int N = 1e6 + 10;
int a[N];int main()
{int n,p;cin >> n >> p;for(int i = 0;i < n;i++) cin >> a[i];sort(a,a+n);// 区间小于等于2pint k = 2 * p;int left = 0,right = 0;int ans = 0;while(right < n){while(a[right] - a[left] > k){left++;}if(a[right] - a[left] <= k) ans = max(ans,right - left + 1);right++;}cout << ans << '\n';return 0;
} 
http://www.xdnf.cn/news/2961.html

相关文章:

  • 字符串(格式化字符串字面值)进行输出
  • Rust 的 Web 世界:actix_web 轻松接收 JSON 请求体
  • 打造美观 API 文档:Spring Boot + Swagger 实战指南
  • C++23 std::byteswap:反转字节 (P1272R4)
  • C#里创建一个TCP客户端连接类
  • 【LeetCode】彩灯装饰记录 III
  • 【运维】使用 DataX 实现 MySQL 到 PostgreSQL 的数据同步
  • 苍穹外卖心得体会
  • [stm32] 4-1 USART(1)
  • 流量控制机制
  • 拆固态硬盘短接开卡+ as ssd benchmark查看硬盘读写速度
  • 基于STM32、HAL库的ADS8866IDGSR模数转换器ADC驱动程序设计
  • 华为云Astro大屏从iotda影子设备抽取数据做设备运行状态的大屏实施步骤
  • Android——Serializable和Parcelable
  • Spring、Spring MVC 与 Spring Boot 的关系与核心用途
  • 什么是全景相机?
  • jenkins slave节点打包报错Failed to create a temp file on
  • Android学习总结之Bitmap篇
  • 《数学物理方程》——第一章 引入与基本概念
  • 【AI工具】DeepWiki试用
  • 第十六届蓝桥杯 C/C++ B组 题解
  • 私有云与虚拟化攻防2(OpenStack渗透场景,大部分云平台都是基于此进行二次开发)
  • C++ 类和对象(3)初始化列表、友元函数、内部类
  • 创龙全志T536全国产(4核A55 ARM+RISC-V+NPU 17路UART)工业开发板硬件说明书
  • 免费IP证书申请
  • leetcode day37 474
  • 【论文阅读】PEEKABOO: Interactive Video Generation via Masked-Diffusion
  • 【神经网络与深度学习】改变随机种子可以提升模型性能?
  • DotNet 入门:(一) 环境安装
  • ElasticSearch入门