美文网首页
LeetCode 475. Heaters

LeetCode 475. Heaters

作者: njim3 | 来源:发表于2019-05-05 10:27 被阅读0次

题目

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.

解析

好久不刷Leetcode了,得把他拾一拾,活跃活跃思维。毕竟要有一个目标,能提早完成最好。

言归正传,该题是求最近的heater,这个距离可以将所有的houses都warm。所以一般能想到的是先求最小后求最大,最小指的是距离最小,最大指的是最小距离的最大值,因为该最大值才能将所有的houses都暖到。
So,

  1. 对于最小值,需要求得每个house对于每个heater的最近的距离;
  2. 对于最大值,指的是最小值求得后,将该最小值和上一次的最小值进行比对,求其最大值。

最后要注意的是,首先要对两个数组进行排序。

代码(C语言)

int compLower(const void* a, const void* b) {
    return *((int*)a) - *((int*)b);
}

int calcMax(int a, int b) {
    return a > b ? a : b;
}

int findRadius(int* houses, int housesSize, int* heaters, int heatersSize){
    qsort(houses, housesSize, sizeof(int), compLower);
    qsort(heaters, heatersSize, sizeof(int), compLower);
    
    int minRadius = 0, j = 0;
    
    for (int i = 0; i < housesSize; ++i) {
        while ((j < heatersSize - 1) && (abs(heaters[j] - houses[i]) >=
                                         abs(heaters[j + 1] - houses[i]))) {
            ++j;        // Find the nearest heater
        }
        
        minRadius = calcMax(minRadius, abs(heaters[j] - houses[i]));
    }
    
    return minRadius;
}

需要说明的是,qsort函数中comp的定义为
a<b时,a在b前面;a>b时,a排在b后面。
另外,在提交时,max函数是没有的,需要定义mac函数。

相关文章

  • LeetCode 475. Heaters

    题目 Winter is coming! Your first job during the contest is...

  • leetcode : 二分搜索(easy)

    leetcode 475 Heaters Problem: Winter is coming! Your firs...

  • LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第...

  • 475. 点燃冬季

    当晚霞染过故乡的屋檐希望铺满山坡时秋季在兑现它的承诺金黄色的包谷在城市的早市,露出老茧季节在忙碌中交替夜,在秋雨中...

  • 475. 供暖器

    冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。 现在,给出位于一条水平线上的房屋和供暖器...

  • 475. 获得关注

    儿童,包括大人的很多行为都是为了获得关注。所以,关注会强化行为,不关注会弱化行为。 因为他注意到,口吃时与他说话的...

  • 475.红豆脱衣篇

    昨天刚好停电,吃完饭之后,就把红豆都剥了出来,花了一个多小时,搞定了一堆红豆,因为壳比较硬,有点难搞,最开始以为可...

  • 475. 责骂与惩罚

    而当前的教育方法却对懒惰的孩子无计可施,相反,这些方法恰好满足了他们的期待。人们越是责备一个懒惰的孩子,就越是正中...

  • week 2019-06-23

    LeetCode 16[M] LeetCode 17[M] LeetCode 926

  • leetcode

    leetcode leetcode to practice leetcode ac code 数组专题 done ...

网友评论

      本文标题:LeetCode 475. Heaters

      本文链接:https://www.haomeiwen.com/subject/olhcoqtx.html