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

牛客对应题目链接:空调遥控 (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 之间,这个点没有想到。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言详解:数组指针

数组指针是指针 int* p[10] 这是指针数组的写法 &#xff0c;因为【】的优先级比*高&#xff0c; 所以为了解决优先级问题&#xff0c;加&#xff08;&#xff09; int(* p)[10]&arr;//数组的地址要存起来 说明p是指针&#xff08;首先与*结合&#xff09;&#xff0c…

python开发的学习路线

I. 基础知识学习 A. Python基础语法 变量和数据类型 学习如何定义变量&#xff0c;理解并使用不同的数据类型&#xff08;整数、浮点数、字符串、布尔值等&#xff09;。 掌握数字类型的转换和操作。 熟悉字符串的基本操作&#xff0c;如拼接、切片、替换和查找。 …

JVM内存模型最新面试题(持续更新)

问题&#xff1a;java中创建的对象一般放在哪里&#xff1f;(全流程包含从创建到回收) 回答 大部分对象在堆中&#xff0c;这个基本都知道&#xff1b; 少部分对象是会在栈中的&#xff0c;比如作用域不局限于方法内的方法内部变量&#xff0c;这类对象的特征一般就是生命周期…

JavaScript对象设计哲学:八种模式塑造高效代码

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言 &#x1f680;二、Object 构造函数 &#x1f9f1;&#x1f4cc; 基本用法&#x1f4cc; 重要性&#x1f4cc; 实际应用案例 三、对象字面量 &#x1f4d8;&#x1f4cc; 定义属性&#x1f4cc; 定义方法&#x1f4…

2.2、Gitea忘记密码重置密码

忘记密码后&#xff0c;管理员可以使用gitea的主程序输入命令重置密码。 gitea admin user change-password --username myname --password asecurepassword

工业派-配置Intel神经计算棒二代(NCS2)

最近两天在工业派ubuntu16.04上配置了Intel神经计算棒二代——Intel Neural Compute Stick&#xff0c;配置过程之艰辛我都不想说了&#xff0c;实在是太折磨人。不过历尽千辛万苦&#xff0c;总算让计算棒可以在工业派ubuntu16.04系统上跑了&#xff0c;还是蛮欣慰的。 注&…

数据分析案例-印度美食数据可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

alphassl泛域名证书13个月600

AlphaSSL是GlobalSign旗下的数字证书品牌&#xff0c;它主要视为客户提供两种入门级的SSL证书——DV单域名以及泛域名SSL证书。这两种SSL证书一种可以保护www和两个域名记录&#xff0c;或者单个子域名激励&#xff1b;另一种可以同时保护多个域名记录&#xff0c;满足了大部分…

Django视图Views

Views视图 HttpRequest 和HttpResponse Django中的视图主要用来接受web请求&#xff0c;并做出响应。视图的本质就是一个Python中的函数视图的响应分为两大类 1)以Json数据形式返回(JsonResponse) 2)以网页的形式返回 2.1)重定向到另一个网页 (HttpRe…

计算机组成原理(超详解!!) 第九节 外围设备

1.外围设备概述 1.外围设备的一般功能 外围设备的定义&#xff1a;这个术语涉及到相当广泛的计算机部件。除了CPU和主存外&#xff0c;计算 机系统的每一部分都可作为一个外围设备来看待。 外围设备的功能&#xff1a;在计算机和其他机器之间&#xff0c;以及计算机与用户之…

C#知识|(实例)大乐透双色球随机选号器项目实现(一)

哈喽,你好啊,我是雷工! 本节学习练习大乐透双色球随机选号器项目的实现,以下为学习笔记。 01 功能需求 当点击【启动】按钮时,号码开始随机变化; 当点击【选择】按钮时,号码停止随机变化,并将选定的号码显示到下方列表; 当点击【清除】按钮时,下方显示列表被清空。…

C# 结合 JavaScript 对 Web 控件进行数据输入验证

目录 关于数据验证 范例运行环境 验证设计 JavaScript 方法 设计 实现 调用示例 C# 方法 设计 实现 调用示例 小结 关于数据验证 在 Web 应用的录入界面&#xff0c;数据验证是一项重要的实现功能&#xff0c;数据验证是指确认 Web 控件输入或选择的数据&#xff…

Microsoft Remote Desktop Beta v10.9.7 Mac微软远程连接工具

Microsoft Remote Desktop Beta 是一种软件应用程序&#xff0c;使用户能够从其设备远程访问基于 Windows 的计算机或虚拟机。它可以在 Windows 和 Mac 操作系统上下载。通过 Microsoft Remote Desktop&#xff0c;用户可以使用远程桌面协议 (RDP) 或 RemoteFX 协议连接到远程桌…

【qt】日历和定时器

日历和定时器 一.Calendar Widget(日历组件)1.日历的基本使用 二.定时器1.定时器的用处2.创建一个定时器3.设置定时器时间间隔4.设置定时器类型5.超时信号6.关联定时器7.启动定时器8.关闭定时器9.定时器要执行功能 三.总结一下&#xff1a; 一.Calendar Widget(日历组件) 1.日…

亚马逊调整退货处理费,卖家如何应对新挑战?

在电子商务领域&#xff0c;退货处理一直是一个重要且复杂的问题。作为全球最大的电子商务平台之一&#xff0c;亚马逊一直在寻求优化退货处理流程&#xff0c;以平衡消费者满意度和运营成本。近日&#xff0c;亚马逊宣布自2024年6月1日起&#xff0c;将对退货处理费收取标准进…

ATFNet:长时间序列预测的自适应时频集成网络

ATFNet是一个深度学习模型&#xff0c;它结合了时间域和频域模块来捕获时间序列数据中的依赖关系。引入了一种新的加权机制来调整周期性的权重&#xff0c;增强了离散傅立叶变换&#xff0c;并包括一个复杂关系识别的注意力机制&#xff0c;在长期时间序列预测中优于当前方法(每…

一休:一款专业的休息提醒软件

对于长期使用电子产品的人来说&#xff0c;保护眼睛至关重要&#xff0c;不论是工作还是学习&#xff0c;适当的休息都是必要的&#xff0c;保护视力要牢记20-20-20法则&#xff0c;眼科医生陶勇也科普过&#xff1a; 使用电脑工作和学习时&#xff0c;容易会忘记时间&#x…

Maven 依赖排查

先从项目去看显而易见&#xff0c;假如我们有一个项目&#xff0c;父工程中包含一些子工程&#xff0c;如下&#xff1a; 我们想看一下samples-account中的依赖关系&#xff0c;那么我们可以打开 samples-account的pom文件&#xff0c;查看其maven依赖关系图。 我们可以看到此项…

WPS如何把多个表格合并到一个表格里面?

注意&#xff1a;此功能需要wps会员。 例如&#xff1a;这里有3个表格。 现在希望合并3个表格到一起&#xff0c;如下图所示。 新建一个表格&#xff0c;打开表格。 选择 开始->工作表->合并表格->整合成为一个工作薄。 弹出对话框&#xff0c;选择添加文件&#xff…

JETBRAINS IDES 分享一个2099通用试用码,支持一键升级!DataGrip 2024 版

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…