【LeetCode每日一题】——475.供暖器
迪丽瓦拉
2025-05-31 03:12:03
0

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 双指针

二【题目难度】

  • 中等

三【题目编号】

  • 475.供暖器

四【题目描述】

  • 冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。
  • 在加热器的加热半径范围内的每个房屋都可以获得供暖。
  • 现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。
  • 说明:所有供暖器都遵循你的半径标准,加热的半径也一样。

五【题目示例】

  • 示例 1:

    • 输入: houses = [1,2,3], heaters = [2]
    • 输出: 1
    • 解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。
  • 示例 2:

    • 输入: houses = [1,2,3,4], heaters = [1,4]
    • 输出: 1
    • 解释: 在位置1, 4上有两个供暖器。我们需要将加热半径设为1,这样所有房屋就都能得到供暖。
  • 示例 3:

    • 输入:houses = [1,5], heaters = [2]
    • 输出:3

六【解题思路】

  • 本题思路不太好想,但是把逻辑理顺之后,代码并不难写
  • 首先我们应该对两个数组进行排序,排序的目的是减少不必要的比较以及避免比较时出错,因为如果不排序可能会导致最短距离找不到,这个可以在纸上用笔简单画一画就明白了
  • 排序之后遍历房屋数组和供暖器数组,但是两个数组遍历的方式不太一样:
    • 房屋数组:从0开始遍历,遍历到数组结尾,此遍历的主要目的是从头到尾求出每个房子距离供暖器的最短距离
    • 供暖器数组:从0开始遍历,遍历到数组结尾的前一个,此遍历的目的是找到距离每个房子最近的供暖器
  • 遍历数组之后,我们就可以得到距离某个房子最近的供暖器了
  • 但是此时我们还没有结束,我们要继续将剩下的所有房屋遍历结束
  • 将所有房屋遍历结束后,我们从所有最小的距离中选出最大的距离就是我们的答案
  • 最后返回结果即可

七【题目提示】

  • 1<=houses.length,heaters.length<=3∗1041 <= houses.length, heaters.length <= 3 * 10^41<=houses.length,heaters.length<=3∗104
  • 1<=houses[i],heaters[i]<=1091 <= houses[i], heaters[i] <= 10^91<=houses[i],heaters[i]<=109

八【时间频度】

  • 时间复杂度:O(mlogm+nlogn)O(mlogm+nlogn)O(mlogm+nlogn),其中mmm和nnn分别为传入的两个数组的长度
  • 空间复杂度:O(logm+logn)O(logm+logn)O(logm+logn),其中mmm和nnn分别为传入的两个数组的长度

九【代码实现】

  1. Java语言版
class Solution {public int findRadius(int[] houses, int[] heaters) {Arrays.sort(houses);Arrays.sort(heaters);int res = 0;for(int i = 0,j = 0;iint curDis = Math.abs(houses[i] - heaters[j]);while(j < heaters.length - 1 && Math.abs(houses[i] - heaters[j]) >= Math.abs(houses[i] - heaters[j + 1])){j++;curDis = Math.min(curDis,Math.abs(houses[i] - heaters[j]));}res = Math.max(curDis,res);}return res;}
}
  1. C语言版
int compare(const void *a,const void *b)
{int *pa = (int*)a;int *pb = (int*)b;return *pa - *pb;
}int findRadius(int* houses, int housesSize, int* heaters, int heatersSize)
{qsort(houses,housesSize,sizeof(int),compare);qsort(heaters,heatersSize,sizeof(int),compare);int res = 0;for(int i = 0,j=0;iint curDis = fabs(houses[i] - heaters[j]);while(j < heatersSize - 1 && fabs(houses[i] - heaters[j]) >= fabs(houses[i] - heaters[j + 1])){j++;curDis = fabs(houses[i] - heaters[j]);}res = fmax(res,curDis);}return res;
}
  1. Python语言版
class Solution:def findRadius(self, houses: List[int], heaters: List[int]) -> int:houses.sort()heaters.sort()lenHouses = len(houses)lenHeaters = len(heaters)res = 0j = 0for i in range(0,lenHouses):curDis = abs(houses[i] - heaters[j])while j < lenHeaters - 1 and abs(houses[i] - heaters[j]) >= abs(houses[i] - heaters[j + 1]):j+=1curDis = abs(houses[i] - heaters[j])res = max(res,curDis)return res
  1. C++语言版
class Solution {
public:int findRadius(vector& houses, vector& heaters) {sort(houses.begin(),houses.end());sort(heaters.begin(),heaters.end());int res = 0;for(int i = 0,j=0;iint curDis = abs(houses[i] - heaters[j]);while(j < heaters.size() - 1 && abs(houses[i] - heaters[j]) >= abs(houses[i] - heaters[j + 1])){j++;curDis = abs(houses[i] - heaters[j]);}res = max(res,curDis);}return res;}
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...