【错题集-编程题】空调遥控(二分 / 滑动窗口)

牛客对应题目链接:空调遥控 (nowcoder.com)


一、分析题目

1、滑动窗口

先排序,然后维护窗口内最大值与最小值的差在 2 * p 之间(max - min)。

2、二分查找

先排序,然后枚举所有的温度,⼆分出符合要求的学生区间,然后统计个数。

二、代码

1、滑动窗口(推荐)

//值得学习的代码
//O(NlogN)
#include <iostream>
#include <algorithm>using namespace std;const int N = 1e6 + 10;int n, p;
int arr[N];int main()
{cin >> n >> p;for(int i = 0; i < n; i++) cin >> arr[i];sort(arr, arr + n);int ret = 0, left = 0, right = 0;p *= 2;while(right < n){while(arr[right] - arr[left] > p){left++;}ret = max(ret, right - left + 1);right++;}cout << ret << endl;return 0;
}

2、二分查找

#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);int res=0;int mini=a[0], maxi=a[n-1];for(int k=mini; k<=maxi; k++){int target=max(k-p, 1);int left=0, right=n-1;while(left<right){int mid=left+(right-left)/2;if(a[mid]>=target) right=mid;else left=mid+1;}int l=left;left=0, right=n-1;target=k+p;while(left<right){int mid=left+(right-left+1)/2;if(a[mid]<=target) left=mid;else right=mid-1;}res=max(res, right-l+1);}cout << res << endl;return 0;
}

三、反思与改进

我只想到了暴力解法,显示排序,然后确定 K 的范围是在数组 a 中的最大和最小值之间,接着看看有多少学生符合要求。因为是取绝对值,所以我就想着从中间值开始向两边遍历,遇到不符合要求的就可以直接 break 了,然后在所有情况里面取最大值即可,但这样做肯定超过数据范围。在看有多少学生符合要求这里可以进行优化,利用二分来确定符合要求学生的范围,再通过范围即可得出数量。

如果采用滑动窗口的话,这道题的核心就在于需要控制最大值与最小值的差在 2 * p 之间,这个点没有想到。

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

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

相关文章

李宏毅-Self-attention机制详解

原视频链接&#xff1a;attention 一. 基本问题分析 1. 模型的input 无论是预测视频观看人数还是图像处理&#xff0c;输入都可以看作是一个向量&#xff0c;输出是一个数值或类别。然而&#xff0c;若输入是一系列向量&#xff0c;长度可能会不同&#xff0c;例如把句子里的…

手机自动化操作:uiautomator

更多精彩内容在公众号。 前面介绍的adb方法都不好实现代码自动化控制&#xff0c;如果想要实现代码自动化控制的话就要用到uiautomator这个工具 UiAutomator是一个用于Android平台的自动化测试框架。它允许开发人员编写自动化测试脚本来模拟用户在Android设备上的操作&#xf…

回归的无分布预测推理

摘要 我们利用保形推理&#xff0c;开发了回归中无分布预测推理的一般框架。所提出的方法允许使用回归函数的任何估计量构建响应变量的预测带。所得的预测带在标准假设下保留了原始估计量的一致性&#xff0c;同时保证了有限样本边际覆盖&#xff0c;即使这些假设不成立。我们…

Unity Mirror 从入门到入神(一)

Mirror从入门到成神 文章目录 Mirror从入门到成神简介NetworkClientRegisterPrefabConnect (string address)Disconnect ()activeactiveHost NetworkServerSpawn 简介 Mirror是一个unity网络同步框架&#xff0c;基于MonoBehaviour生命周期的回调的基础上进行数值的同步&#…

文本三剑客-awk

一、awk的介绍 1.1awk的简介 AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具 可以在无交互的模式下实现复杂的文本操作 相较于sed常作用于一整个行的处理&#xff0c;awk则比较倾向于一行当中分成数个字段来处理&#xff0c;因为awk相当适合小型的文本…

SQL已知2商品的总价,求商品的数量

已知商品1和2价格&#xff0c;求商品1的数量&#xff08;商品2的数量自动计算&#xff09;&#xff0c;使得商品总价小于并最接近目标总价的值&#xff1b; 解决&#xff1a; 使用MySQL数据库&#xff1a; -- 创建表 CREATE TABLE products (price_1 INT,price_2 INT,target_p…

回顾程序员18年自己取得的一些成绩有想卖ERP源码的冲动

好久没来csdn发文章&#xff0c;记录自己程序员生涯的心得了&#xff0c;回顾自己2006年湘大信息计算科学专业毕业&#xff0c;当年和班里其他两个同学被招录进富士康&#xff0c;做为新干班签了3年半的合同&#xff0c;在那呆了2年&#xff0c;感觉富士康毕竟是个制造业&#…

HackTheBox-Machines--Bank

文章目录 0x01 信息收集0x02 文件上传漏洞利用0x03 权限提升方法一&#xff1a;SUID提权方法二&#xff1a;配置不当提权 Bank 测试过程 0x01 信息收集 1.端口扫描 发现 ssh(22)、DNS(53)、HTTP(80) 端口 nmap -sC -sV 10.129.29.200访问 80 端口&#xff0c;页面为Apache2 U…

翻译《The Old New Thing》- Stupid debugger tricks: Calling functions and methods

Stupid debugger tricks: Calling functions and methods - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20070427-00/?p27083 Raymond Chen 2007年04月27日 一个比较笨的调试技巧&#xff1a;调用函数和方法 在过去&#xff0c;如果你想在…

大模型时代,交换机技术演变、性能分析、衡量指标

OSI协议及在高性能计算中向RDMA的过渡 协议是为计算机网络内的数据交换而建立的一组规则、标准或协议。在法律层面&#xff0c;OSI七层协议被视为国际标准。该协议于20世纪80年代引入&#xff0c;旨在通过其七层网络模型标准化计算机间通信&#xff0c;以满足开放网络的要求。…

Lazyboy品牌发布会“球幕气膜”

Lazyboy品牌发布会“球幕气膜”为品牌活动提供了一个独特、现代化、环保的展示空间。这座球幕气膜不仅为发布会提供了一个视觉震撼的场地&#xff0c;也为与会嘉宾带来了全新的体验。作为轻空间&#xff08;江苏&#xff09;膜科技有限公司&#xff08;以下简称“轻空间”&…

C++ 数据结构算法 学习笔记(25) - 图及其企业级应用

C 数据结构算法 学习笔记(25) - 图及其企业级应用 图的故事导入 故事情节 Jack 自从买车后&#xff0c;交通出行方便了&#xff0c;心自然就野了&#xff01;身边的各种朋友自然就多了起来&#xff01; 有一天晚上&#xff0c;一个年轻漂亮的女同事生日&#xff0c;Jack 受邀…