其他分享
首页 > 其他分享> > 475. 供暖器

475. 供暖器

作者:互联网

冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。

在加热器的加热半径范围内的每个房屋都可以获得供暖。

现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。

说明:所有供暖器都遵循你的半径标准,加热的半径也一样。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/heaters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二分

import java.util.Arrays;

class Solution {

    private int search(int[] heaters, int target) {
        int l = 0, r = heaters.length - 1;
        while (l <= r) {
            int mid = (l + r) >> 1;
            if (heaters[mid] < target) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return l;
    }

    public int findRadius(int[] houses, int[] heaters) {
        Arrays.sort(heaters);
        int ans = 0;

        for (int house : houses) {
            int index = search(heaters, house);
            int distance = index == 0 ? heaters[index] - house :
                    (index == heaters.length ? house - heaters[index - 1] :
                            Math.min(house - heaters[index - 1], heaters[index] - house));
            ans = Math.max(ans, distance);
        }

        return ans;
    }
}

双指针

import java.util.Arrays;

class Solution {

    public int findRadius(int[] houses, int[] heaters) {
        Arrays.sort(houses);
        Arrays.sort(heaters);
        int ans = 0;
        int index1 = 0, index2 = 0;
        while (index1 < houses.length && index2 < heaters.length) {
            int distance = Math.abs(houses[index1] - heaters[index2]);
            while (index2 < heaters.length - 1 && Math.abs(houses[index1] - heaters[index2 + 1]) <= distance) {
                distance = Math.abs(houses[index1] - heaters[++index2]);
            }
            ans = Math.max(ans, distance);
            index1++;
        }

        return ans;
    }
}

标签:heaters,供暖,index,int,house,houses,475,index2
来源: https://www.cnblogs.com/tianyiya/p/15784263.html