首页 > 编程语言 >二分算法

二分算法

时间:2023-10-26 12:33:34浏览次数:34  
标签:二分 heaters int mid houses 算法 rid check

while(l + 1 < r) {

  int mid = l + r >> 1;

  if(check(mid)) l = mid;

  else r = mid;

}

 

 

 

class Solution {
public:
    int findRadius(vector<int>& houses, vector<int>& heaters) {
        int n = houses.size(), m = heaters.size();

        sort(houses.begin(), houses.end());
        sort(heaters.begin(), heaters.end());

        auto check = [&](int rid) -> bool {
            for(int i = 0, j = 0; i < n; i ++ ) {
                while(j < m && houses[i] > heaters[j] + rid) j ++ ;
                if(j < m && heaters[j] - rid <= houses[i] && heaters[j] + rid >= houses[i]) continue;
                return false;
            }
            return true;
        };

        int l = -1, r = 1e9;
        while(l + 1 < r) {
            int mid = l + r >> 1;
            if(check(mid)) r = mid;
            else l = mid;
        }

        return r;
    }
};

 

标签:二分,heaters,int,mid,houses,算法,rid,check
From: https://www.cnblogs.com/zk6696/p/17789138.html

相关文章

  • 随机算法学习指南
    整数数组随机生成算法[python]#pythonimportrandomarray=[random.randint(-100,100)for_inrange(1000)]foriinarray:print(i,end="")随机抽取一组不重复的数Fisher-Yates洗牌算法(Knuth洗牌算法)时间复杂度优化到了O(n),空间复杂度优化到了O(1)。voidshuffle......
  • 【算法题】2525. 根据规则将箱子分类
    题目:给你四个整数length,width,height和mass,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子类别的字符串。如果满足以下条件,那么箱子是“Bulky”的:箱子至少有一个维度大于等于104。或者箱子的体积大于等于109。如果箱子的质量大于等于100,那么箱子是......
  • 【算法题】2906. 构造乘积矩阵
    题目:给你一个下标从0开始、大小为n*m的二维整数矩阵grid,定义一个下标从0开始、大小为n*m的的二维矩阵p。如果满足以下条件,则称p为grid的乘积矩阵:对于每个元素p[i][j],它的值等于除了grid[i][j]外所有元素的乘积。乘积对12345取余数。返回grid的乘积矩......
  • 【算法题】2905. 找出满足差值条件的下标 II
    题目:给你一个下标从0开始、长度为n的整数数组nums,以及整数indexDifference和整数valueDifference。你的任务是从范围[0,n-1]内找出2个满足下述所有条件的下标i和j:abs(i-j)>=indexDifference且abs(nums[i]-nums[j])>=valueDifference返回整数数组a......
  • 【算法题】2530.执行 K 次操作后的最大分数
    题目:给你一个下标从0开始的整数数组nums和一个整数k。你的起始分数为0。在一步操作中:选出一个满足0<=i<nums.length的下标i,将你的分数增加nums[i],并且将nums[i]替换为ceil(nums[i]/3)。返回在恰好执行k次操作后,你可能获得的最大分数。向上取......
  • 【算法题】2899. 上一个遍历的整数
    题目:给你一个下标从0开始的字符串数组words,其中words[i]要么是一个字符串形式的正整数,要么是字符串“prev”。我们从数组的开头开始遍历,对于words中的每个“prev”字符串,找到words中的上一个遍历的整数,定义如下:k表示到当前位置为止的连续“prev”字符串数目(包含......
  • 【算法题】2903. 找出满足差值条件的下标 I
    题目:给你一个下标从0开始、长度为n的整数数组nums,以及整数indexDifference和整数valueDifference。你的任务是从范围[0,n-1]内找出2个满足下述所有条件的下标i和j:abs(i-j)>=indexDifference且abs(nums[i]-nums[j])>=valueDifference返回整数数组a......
  • 【算法题】只出现一次的数字 III
    题目:给你一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。示例1:输入:nums=[1,2,1,3,2,5]输出:[3,5]解释:[5,3]也是......
  • APP渗透--magisk+LSPosed+算法助手环境安装
    安装mgisk1、先安装app-debug.apk首先设置好模拟器的设置设置为可写入开启root之后重启安装app-debug.apk然后点开这个面具给root权限点击安装勾选这个选项之后就重启然后点开面具之后点击下一步必须看到安装到系统分区之后点击开始等待安装直到这里出现alldon......
  • 代码随想录第一天 | 704. 二分查找 、 27. 移除元素
    https://leetcode.cn/problems/binary-search/第一眼看到题目的时候下意识直接搞了暴力搜索(一个一个对比),后来觉得时间复杂度太高了,就搞了二分法,之后再看文章,思路透彻了很多,因为我之前写二分法都是凭感觉,没有仔细琢磨过 https://leetcode.cn/problems/remove-element/帅!otto ......