leetcode 475. Heaters 加热器最小加热半径 + 求解左近邻和右近邻 + 最小最大化问题
2017-12-13 09:39
465 查看
Winter is coming! Your first job during the contest is to design a standard heater with fixed warm radius to warm all the houses.
Now, you are given positions of houses and heaters on a horizontal line, find out minimum radius of heaters so that all houses could be covered by those heaters.
So, your input will be the positions of houses and heaters seperately, and your expected output will be the minimum radius standard of heaters.
Note:
Numbers of houses and heaters you are given are non-negative and will not exceed 25000.
Positions of houses and heaters you are given are non-negative and will not exceed 10^9.
As long as a house is in the heaters’ warm radius range, it can be warmed.
All the heaters follow your radius standard and the warm radius will the same.
Example 1:
Input: [1,2,3],[2]
Output: 1
Explanation: The only heater was placed in the position 2, and if we use the radius 1 standard, then all the houses can be warmed.
Example 2:
Input: [1,2,3,4],[1,4]
Output: 1
Explanation: The two heater was placed in the position 1 and 4. We need to use radius 1 standard, then all the houses can
本题题意很简单最笨的方法就是r从1开始逐步递增,不过这样可能超时,这其实是一个寻找最近邻的问题,分别求解一个house距离heater左边和右边的最近的距离,然后选择二者中的min,最后根据这个距离数组求最大值来确定半径距离
本体其实很简单,就是一个遍历问题,问题的关键是想到求解左近邻和右近邻的思路
代码如下:
Now, you are given positions of houses and heaters on a horizontal line, find out minimum radius of heaters so that all houses could be covered by those heaters.
So, your input will be the positions of houses and heaters seperately, and your expected output will be the minimum radius standard of heaters.
Note:
Numbers of houses and heaters you are given are non-negative and will not exceed 25000.
Positions of houses and heaters you are given are non-negative and will not exceed 10^9.
As long as a house is in the heaters’ warm radius range, it can be warmed.
All the heaters follow your radius standard and the warm radius will the same.
Example 1:
Input: [1,2,3],[2]
Output: 1
Explanation: The only heater was placed in the position 2, and if we use the radius 1 standard, then all the houses can be warmed.
Example 2:
Input: [1,2,3,4],[1,4]
Output: 1
Explanation: The two heater was placed in the position 1 and 4. We need to use radius 1 standard, then all the houses can
本题题意很简单最笨的方法就是r从1开始逐步递增,不过这样可能超时,这其实是一个寻找最近邻的问题,分别求解一个house距离heater左边和右边的最近的距离,然后选择二者中的min,最后根据这个距离数组求最大值来确定半径距离
本体其实很简单,就是一个遍历问题,问题的关键是想到求解左近邻和右近邻的思路
代码如下:
#include <iostream> #include <vector> #include <map> #include <set> #include <queue> #include <stack> #include <string> #include <climits> #include <algorithm> #include <sstream> #include <functional> #include <bitset> #include <cmath> using namespace std; class Solution { public: int findRadius(vector<int>& hou, vector<int>& hea) { sort(hou.begin(),hou.end()); sort(hea.begin(),hea.end()); vector<int> right(hou.size(), INT_MAX); int i = 0, j = 0; while (i < hou.size() && j < hea.size()) { if (hou[i] <= hea[j]) { right[i] = hea[j] - hou[i]; i++; } else j++; } i = hou.size() - 1, j = hea.size() - 1; vector<int> left(hou.size(), INT_MAX); while (i >=0 && j >= 0) { if (hou[i] >= hea[j]) { left[i] = hou[i] - hea[j]; i--; } else j--; } vector<int> res(hou.size(), 0); for (int i = 0; i < res.size(); i++) res[i] = min(left[i],right[i]); return *max_element(res.begin(),res.end()); } };
相关文章推荐
- poj 1064 求解最大化问题
- 同余问题怎么求解最小正整数解
- Leetcode563.+Leetcode543. DFS之应用(一):求解树计算问题
- 利用投影法求解向量函数的最小值问题
- Aggressive cows(最大化最小值问题(二分搜索))
- Leetcode 475. Heaters 加热器 解题报告
- opencv 中,使用cvSolve函数,求解线性方程组,或者最小二乘法问题
- Leetcode[53]分治算法求解最长子串和问题
- 最大最小蚁群算法求解TSP商旅问题
- 对偶图对于平面图最小割的求解(网络流问题)
- leetcode解题之475. Heaters Java版(加热器)
- poj3258 二分 最小值最大化问题
- [leetcode]分治法求解最大子序列问题——Java实现
- CodeForces 645C(最大化最小值问题)
- [LeetCode系列] 二叉树最大深度求解问题(C++递归解法)
- [点点搬家]求解很大半径球面上的整数点问题
- 最小值最大化问题(贪心系列)
- poj3041 最小点覆盖==二分图最大匹配 匈牙利算法求解最大匹配问题(运用DFS)
- LeetCode[50]分治算法求解power(double,int)问题
- poj 2456 Aggressive cows (最小值最大化二分问题)