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二分]

给定两个整数数组ab,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差

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. 两地调度 [贪心]

公司计划面试 2n 人。给你一个数组 costs ,其中 costs[i] = [aCosti, bCosti] 。第 i 人飞往 a 市的费用为 aCosti ,飞往 b 市的费用为 bCosti

返回将每个人都飞到 ab 中某座城市的最低费用,要求每个城市都有 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. 峰与谷 [贪心]

在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。

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 供暖器,最小差,两地调度,峰与谷相关推荐

  1. leetcode475. 供暖器(二分查找)

    冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房屋和供暖器的位置. ...

  2. LeetCode 475. 供暖器(双指针二分查找)

    文章目录 1. 题目 2. 解题 2.1 双指针 2. 二分查找 1. 题目 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置, ...

  3. Leetcode475.Heaters供暖器

    冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房屋和供暖器的位置. ...

  4. Heaters 供暖器

    冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房屋和供暖器的位置. ...

  5. 2022-2-7 Leetcode 475.供暖器

    我的思路是在房屋的位置里面找热水器的位置,(为什么这样做不好?因为会有多个热水器 而正确的应该是在热水器里面找里房屋最近的热水器. int minRadius(vector<int>&am ...

  6. leetcode 工作每日一题 475. 供暖器 (二分 stl)

    题意: 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖.在加热器的加热半径范围内的每个房屋都可以获得供暖.现在,给出位于一条水平线上的房屋 houses 和供暖器 heater ...

  7. 2022-01-27:供暖器。 冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。 在加热器的加热半径范围内的每个房屋都可以获得供暖。 现在,给出位于一条水平线上的房屋 hous

    2022-01-27:供暖器. 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 在加热器的加热半径范围内的每个房屋都可以获得供暖. 现在,给出位于一条水平线上的房屋 hous ...

  8. leetCode每日一题js--01供暖器

    供暖器 题目: 在加热器的加热半径范围内的每个房屋都可以获得供暖. 现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径. 说 ...

  9. 【Linux 内核】CFS 调度器 ② ( CFS 调度器 “ 权重 “ 概念 | CFS 调度器调度实例 | 计算进程 “ 实际运行时间 “ )

    文章目录 一.CFS 调度器 " 权重 " 概念 二.CFS 调度器调度实例 ( 计算进程 " 实际运行时间 " ) 一.CFS 调度器 " 权重 & ...

最新文章

  1. vs内存泄露检测方法
  2. Android内核开发:学会分析系统的启动log
  3. 文本基线怎样去掉_ICML 2020 | 基于类别描述的文本分类模型
  4. android q测试机型,小米9安卓Q系统刷机包开启测试 小米Android Q适配机型一览
  5. 7.25第一次组队赛
  6. 计算机win10启动慢,Win10 开机慢/Win10启动慢的常见原因
  7. linux 中w和x 区别,r、w、x权限在文件和目录中的含义有何区别?
  8. 没有bug队——加贝——Python 51,52
  9. 太原理工大学ICPC队介绍(2020版)
  10. 在美国公司架构中,LLC、LLP 和 Corporation 的区别何在?
  11. Codeforces 700 C. Break Up(Tarjan求桥)
  12. Java实现 LeetCode 592 分数加减运算(纯体力活)
  13. 求不规则立方体表面积java_立方体的表面积怎么求(测算表面积公式全集)
  14. RabbitMQ中交换机的几种模式
  15. 南昌大学科学技术学院计算机专业,南昌大学科学技术学院
  16. 软件测试常用的8种功能测试类型
  17. python做cae库,基于Python的CAE自动后处理开发
  18. 《统计学习方法》 第十七章 潜在语义分析
  19. 逻辑推理之赵钱孙李周
  20. ArcGIS中地表径流

热门文章

  1. 什么是浮动塌陷css,css样式float造成的浮动“塌陷”问题的解决办法
  2. Linux基础之的权限数字含义
  3. 骨龄特征点定位、以及预测
  4. 树莓派4b和3b+功耗_ARM v8(树莓派4)搭建服务器和性能测试实战
  5. TCP的三次握手与四次挥手基本理解
  6. java线程(16)——死锁讲解,白雪公主与灰姑娘抢口红和镜子的案例
  7. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法
  8. 浅谈与时俱进的OS发展史
  9. Linux下ifconfig不显示ip地址问题总结
  10. NLP-神经语言模型:文本生成