475. Heaters

来源:互联网 发布:国家知织产权局专利局 编辑:程序博客网 时间:2024/06/07 02:39

简单题,不过细节要考虑的很细。一开始想错了,以为house不在相邻两个heater的区间上,那么就不行了。其实完全没有这个条件,如果在这个heat上不行,那么就在下一个heater上找,如果搜索了一遍还是找不到,那么这个radia就不行。

class Solution {public:    bool judge(int radia,vector<int>& houses, vector<int>& heaters)    {        int left=heaters[0]-radia;        int right;        if(heaters[0]>=INT_MAX-radia)            right=INT_MAX;        else            right=heaters[0]+radia;        int houseIndex=0;        int heaterIndex=0;        while(houseIndex<houses.size()&&heaterIndex<heaters.size())        {            if((houses[houseIndex]>=left&&houses[houseIndex]<=right))                houseIndex++;            else            {                heaterIndex++;                if(heaterIndex<heaters.size())                {                    left=heaters[heaterIndex]-radia;                    if(heaters[heaterIndex]>=INT_MAX-radia)                        right=INT_MAX;                    else                        right=heaters[heaterIndex]+radia;                }            }        }        if(houseIndex==houses.size())            return true;        else            return false;    }    int findRadius(vector<int>& houses, vector<int>& heaters) {        sort(houses.begin(),houses.end());        sort(heaters.begin(),heaters.end());        if(houses.size()==0)            return 0;        int left=0;        int right=houses.back()>heaters.back()?houses.back():heaters.back();        while(1)        {            int mid=left+(right-left)/2;            if(judge(mid,houses,heaters))                right=mid;            else                left=mid+1;            if(left==right)                break;        }        return left;    }};
0 0
原创粉丝点击