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 be warmed.

Solution: why we use binary search here, thr brute force search method is get max(min (dist)), to reduce time complexixity we need to use binary search(why), there are two elments(in heaters) close to the houses[i]

Here binary search model is to find first >= target. (basic model is 35 search insert poition

class Solution {
//check houses, compare maxdist(min(house[i], heaters[j]) : min distance between house[i], heaters[j]; and get max of them; max(min(dist))
public int findRadius(int[] houses, int[] heaters) {
int radius = 0;//max
Arrays.sort(heaters);
for(int i = 0; i<houses.length; i++){
int min = Integer.MAX_VALUE;
//binary search (find first >= houses), target is houses[i]
int l = 0, r = heaters.length-1;
while(l <= r){
int m = (r-l)/2 + l;
if(heaters[m] >= houses[i]) r = m-1 ;
else l = m+1;
}
//System.out.println(l);
//l is the index, could be 0, >=heaters.length
int d1 = l-1>=0 ? (houses[i] - heaters[l-1]) : Integer.MAX_VALUE;
int d2 = l<heaters.length ? (heaters[l] - houses[i]): Integer.MAX_VALUE;// handle all the things
min = d1<d2 ? d1 : d2;
if(min > radius) radius = min;
}
return radius;
}
}

Another way : call built in function of binary search in the Arrays.binarySearch(); (https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch(int[],%20int)) https://www.geeksforgeeks.org/arrays-binarysearch-java-examples-set-1/(geekforgeek)

public class Solution {
public int findRadius(int[] houses, int[] heaters) {
Arrays.sort(heaters);
int result = Integer.MIN_VALUE; for (int house : houses) {
int index = Arrays.binarySearch(heaters, house);
if (index < 0) {
index = -(index + 1);
}
int dist1 = index - 1 >= 0 ? house - heaters[index - 1] : Integer.MAX_VALUE;
int dist2 = index < heaters.length ? heaters[index] - house : Integer.MAX_VALUE; result = Math.max(result, Math.min(dist1, dist2));
} return result;
}
}

lastly, remember to sort first

35. search the insert position: find first index >= target

class Solution {
public int searchInsert(int[] nums, int target) {
int l = 0, r = nums.length-1;
//find first larger element >= target (four cases)
while(l<=r){//the last case is l==r and
int m = (r-l)/2 + l;
if(nums[m] >= target) r = m-1;//this one or before this one
else l = m+1;//certain right
}
return l;
}
}

69. sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.

Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.

Example 1:

Input: 4
Output: 2
Example 2: Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since
the decimal part is truncated, 2 is returned.

Solution: find last element's square <= x (recursive)........................... m <= x/m , look out for m = 0 case

m < x/m: could be this or right

m==x/m: this one

m > x/m: must be left(shift to left)

class Solution {
public int mySqrt(int x) {//find frist ele ele^2 >= 8
return bs(0,x, x);
}
int bs(int l, int r, int x){
if(x < 1) return 0;
if(x==1) return 1;
if(l > r) return r;
int m = (r-l)/2+l;
if(m > x/m) return bs(l, m-1, x);
else return bs(m+1, r,x);
//return r;
}
}

367 valid perfect square

Given a positive integer num, write a function which returns True if num is a perfect square else False.

Note: Do not use any built-in library function such as sqrt.

Example 1:

Input: 16
Returns: True
Example 2: Input: 14
Returns: False

Solution: O(lgn), find the sqrt(x) firstly

class Solution {
public boolean isPerfectSquare(int num) {
//bs to get the num
int l = 1, r = num;
while(l<=r){
int m = (r-l)/2 + l;
if(m > num/m) r = m-1;
else l = m+1;
}
return (r*r==num);
}
}

475. Heaters (start binary search, appplication for binary search)的更多相关文章

  1. 04-树7. Search in a Binary Search Tree (25)

    04-树7. Search in a Binary Search Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 ...

  2. pat04-树7. Search in a Binary Search Tree (25)

    04-树7. Search in a Binary Search Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 ...

  3. [Algorithms] Refactor a Linear Search into a Binary Search with JavaScript

    Binary search is an algorithm that accepts a sorted list and returns a search element from the list. ...

  4. 【Leetcode_easy】700. Search in a Binary Search Tree

    problem 700. Search in a Binary Search Tree 参考1. Leetcode_easy_700. Search in a Binary Search Tree; ...

  5. 将百分制转换为5分制的算法 Binary Search Tree ordered binary tree sorted binary tree Huffman Tree

    1.二叉搜索树:去一个陌生的城市问路到目的地: for each node, all elements in its left subtree are less-or-equal to the nod ...

  6. ERROR Shell: Failed to locate the winutils binary in the hadoop binary path

    文章发自:http://www.cnblogs.com/hark0623/p/4170172.html  转发请注明 14/12/17 19:18:53 ERROR Shell: Failed to ...

  7. WIN7下运行hadoop程序报:Failed to locate the winutils binary in the hadoop binary path

    之前在mac上调试hadoop程序(mac之前配置过hadoop环境)一直都是正常的.因为工作需要,需要在windows上先调试该程序,然后再转到linux下.程序运行的过程中,报Failed to ...

  8. 【leetcode】475. Heaters

    problem 475. Heaters solution1: class Solution { public: int findRadius(vector<int>& house ...

  9. Hadoop:开发机运行spark程序,抛出异常:ERROR Shell: Failed to locate the winutils binary in the hadoop binary path

    问题: windows开发机运行spark程序,抛出异常:ERROR Shell: Failed to locate the winutils binary in the hadoop binary ...

随机推荐

  1. EntityFrameWork Code First 多对多关系处理

    场景2: 一个文章类别(Category)下含有多篇文章(Article),而文章也可能对应多个类别 Article和Category的代码更改如下: /// <summary> /// ...

  2. Hibernate 多对一映射

    <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBL ...

  3. PL/SQL之流控制语句

    1.选择控制语句 --语法1--IF 条件 THEN 语句; END IF; DECLARE v_Salary ,); BEGIN SELECT salary INTO v_Salary FROM a ...

  4. js中random的应用

    1.生成一个随机数 var r = Math.random(); console.info(r); 结果生成一个0-1的随机数(返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1)) 2.生成 ...

  5. 怎么让textarea的光标靠左对齐

    1.怎么让textarea的光标靠左对齐: 把<textarea></textarea>之间空隙去掉就可以了. 2.怎么限制textarea的字数,利用maxlength属性限 ...

  6. String Control

    using System; using System.Collections.Generic; using System.Text; using System.Web; using System.We ...

  7. MySQL查询(未完结)

    MySql查询 单表查询: 查询所有字段 SELECT * FROM 表名; '*' 代表所有字段 查询指定字段 SELECT 字段名1, 字段名2 FROM 表名; 按照指定条件查询记录 1. 查询 ...

  8. 移动端mate标签设置

    <meta name="viewport" content="width=device-width,height=device-height,initial-sca ...

  9. CSS性能优化新属性:will-change

    ---恢复内容开始--- will-change属性通过告诉浏览器什么属性.什么元素将会发生变化,可以对这些操作进行可能性的优化,由此提高CSS动画的执行效率. 这个属性可以有4个值: auto: 实 ...

  10. 边缘检测matlab算法汇总

    边缘检测matlab算法汇总 1.      基于一阶微分算子检测边缘图像 一阶微分边缘算子又称梯度边缘算子,它是利用图像在边缘处的阶跃性,及图像梯度在边缘去得极大值得特征性进行边缘检测. Sobel ...