2022-6-5 供暖器,最小差,两地调度,峰与谷
1. 供暖器 [双指针or二分]
冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。
现在,给出位于一条水平线上的房屋 houses
和供暖器 heaters
的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。
Example 1
输入: houses = [1,2,3], heaters = [2]
输出: 1
解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。
Example 2
输入: houses = [1,2,3,4], heaters = [1,4]
输出: 1
解释: 在位置1, 4上有两个供暖器。我们需要将加热半径设为1,这样所有房屋就都能得到供暖。
代码 [双指针]
class Solution {public:int findRadius(vector<int> &houses, vector<int> &heaters) {int n = houses.size(), m = heaters.size();sort(houses.begin(), houses.end());sort(heaters.begin(), heaters.end());int r = (houses[0] < heaters[0] || houses.back() > heaters.back()) ? max(heaters[0] - houses[0], houses.back() - heaters.back()) : 0;int h1 = 0, h2 = 1;for (int i = 0, ri; i < n; i++) {if (houses[i] < heaters[h1]) continue;while (h2 < m && houses[i] > heaters[h2]) ++h1, ++h2;if (h2 == m) break;ri = min(abs(houses[i] - heaters[h1]), abs(houses[i] - heaters[h2]));r = max(r, ri);}return r;}
};
2. 最小差 [双指针or二分]
给定两个整数数组a
和b
,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差
Example 1
输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}
输出:3,即数值对(11, 8)
代码 [二分]
class Solution {private:using ll = long long;public:int smallestDifference(vector<int> &a, vector<int> &b) {if (a.size() > b.size()) swap(a, b);sort(a.begin(), a.end());ll r = LONG_LONG_MAX, d1, d2;for (ll bi:b) {int idx = lower_bound(a.begin(), a.end(), bi) - a.begin();d1 = idx < a.size() ? a[idx] - bi : LONG_LONG_MAX;d2 = idx != 0 ? bi - a[idx - 1] : LONG_LONG_MAX;r = min({r, d1, d2});}return r;}
};
3. 两地调度 [贪心]
返回将每个人都飞到 a
、b
中某座城市的最低费用,要求每个城市都有 n
人抵达**。**
Example 1
输入:costs = [[10,20],[30,200],[400,50],[30,20]]
输出:110
解释:
第一个人去 a 市,费用为 10。
第二个人去 a 市,费用为 30。
第三个人去 b 市,费用为 50。
第四个人去 b 市,费用为 20。最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试。
Example 2
输入:costs = [[259,770],[448,54],[926,667],[184,139],[840,118],[577,469]]
输出:1859
代码
class Solution {public:int twoCitySchedCost(vector<vector<int>> &costs) {sort(costs.begin(), costs.end(), [](const vector<int> &lo, const vector<int> &hi) {return lo[0] - lo[1] < hi[0] - hi[1];});int total = 0, n = costs.size() >> 1;for (int i = 0; i < n; ++i) total += costs[i][0] + costs[i + n][1];return total;}
};
4. 峰与谷 [贪心]
Example 1
输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]
代码 1 O(nlogn)
class Solution {public:void wiggleSort(vector<int> &nums) {sort(nums.begin(), nums.end());int lo = 0, hi = nums.size() - 1;vector<int> result;result.reserve(nums.size());while (lo < hi) {result.push_back(nums[hi--]);result.push_back(nums[lo++]);}if (lo == hi) result.push_back(nums[lo]);nums = move(result);}
};
代码 2 O(n)
class Solution {public:void wiggleSort(vector<int> &nums) {int i = 1;while (i < nums.size()) {if (nums[i] < nums[i - 1]) swap(nums[i], nums[i - 1]);++i;if (i < nums.size() && nums[i] > nums[i - 1]) swap(nums[i], nums[i - 1]);++i;}}
};
2022-6-5 供暖器,最小差,两地调度,峰与谷相关推荐
- leetcode475. 供暖器(二分查找)
冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房屋和供暖器的位置. ...
- LeetCode 475. 供暖器(双指针二分查找)
文章目录 1. 题目 2. 解题 2.1 双指针 2. 二分查找 1. 题目 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置, ...
- Leetcode475.Heaters供暖器
冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房屋和供暖器的位置. ...
- Heaters 供暖器
冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房屋和供暖器的位置. ...
- 2022-2-7 Leetcode 475.供暖器
我的思路是在房屋的位置里面找热水器的位置,(为什么这样做不好?因为会有多个热水器 而正确的应该是在热水器里面找里房屋最近的热水器. int minRadius(vector<int>&am ...
- leetcode 工作每日一题 475. 供暖器 (二分 stl)
题意: 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖.在加热器的加热半径范围内的每个房屋都可以获得供暖.现在,给出位于一条水平线上的房屋 houses 和供暖器 heater ...
- 2022-01-27:供暖器。 冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。 在加热器的加热半径范围内的每个房屋都可以获得供暖。 现在,给出位于一条水平线上的房屋 hous
2022-01-27:供暖器. 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 在加热器的加热半径范围内的每个房屋都可以获得供暖. 现在,给出位于一条水平线上的房屋 hous ...
- leetCode每日一题js--01供暖器
供暖器 题目: 在加热器的加热半径范围内的每个房屋都可以获得供暖. 现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径. 说 ...
- 【Linux 内核】CFS 调度器 ② ( CFS 调度器 “ 权重 “ 概念 | CFS 调度器调度实例 | 计算进程 “ 实际运行时间 “ )
文章目录 一.CFS 调度器 " 权重 " 概念 二.CFS 调度器调度实例 ( 计算进程 " 实际运行时间 " ) 一.CFS 调度器 " 权重 & ...
最新文章
- vs内存泄露检测方法
- Android内核开发:学会分析系统的启动log
- 文本基线怎样去掉_ICML 2020 | 基于类别描述的文本分类模型
- android q测试机型,小米9安卓Q系统刷机包开启测试 小米Android Q适配机型一览
- 7.25第一次组队赛
- 计算机win10启动慢,Win10 开机慢/Win10启动慢的常见原因
- linux 中w和x 区别,r、w、x权限在文件和目录中的含义有何区别?
- 没有bug队——加贝——Python 51,52
- 太原理工大学ICPC队介绍(2020版)
- 在美国公司架构中,LLC、LLP 和 Corporation 的区别何在?
- Codeforces 700 C. Break Up(Tarjan求桥)
- Java实现 LeetCode 592 分数加减运算(纯体力活)
- 求不规则立方体表面积java_立方体的表面积怎么求(测算表面积公式全集)
- RabbitMQ中交换机的几种模式
- 南昌大学科学技术学院计算机专业,南昌大学科学技术学院
- 软件测试常用的8种功能测试类型
- python做cae库,基于Python的CAE自动后处理开发
- 《统计学习方法》 第十七章 潜在语义分析
- 逻辑推理之赵钱孙李周
- ArcGIS中地表径流
热门文章
- 什么是浮动塌陷css,css样式float造成的浮动“塌陷”问题的解决办法
- Linux基础之的权限数字含义
- 骨龄特征点定位、以及预测
- 树莓派4b和3b+功耗_ARM v8(树莓派4)搭建服务器和性能测试实战
- TCP的三次握手与四次挥手基本理解
- java线程(16)——死锁讲解,白雪公主与灰姑娘抢口红和镜子的案例
- python读取pdf文件_深入学习python解析并读取PDF文件内容的方法
- 浅谈与时俱进的OS发展史
- Linux下ifconfig不显示ip地址问题总结
- NLP-神经语言模型:文本生成