剑指 Offer II 071. 按权重生成随机数

二分+前缀和

看了几遍题目愣是没看明白,最后看的题解明白了!

题意就是按照 w[i]w[i]w[i] 的权重选取下标 iii,这个问题可以转化成:所有小球连续排放在一条线上,下标 iii 种类的球有 w[i]w[i]w[i] 个(相同种类的球是连续排放的),那么第 nnn 个球下标就为 nnn ,nnn取值范围为 [1,total][1,total][1,total] totaltotaltotal 为球总数。随机选取一个球然后判断球是哪个种类即可。

  1. 首先使用等概率 rand()rand()rand() 选取一个数(可看成一个下标),范围为 [0,total][0,total][0,total] ( totaltotaltotal 为球总数)。
  2. 为了方便二分判断这里使用前缀和,比如:有两种球 [1,3][1,3][1,3],分别用 aaa 和 bbb 表示,将球排成一条线 abbbabbbabbb,前缀和就是 [1,4][1,4][1,4] ,如果随机到 333 可以观察到这个位置的球是 bbb 那么就返回的是下标111,若随机到 111 即球 aaa ,则返回下标 000 。
  3. 然后用二分判断这个球是哪个种类即可(就是原数组下标),返回第一个大于等于 xxx 的前缀和下标(球的种类)。
class Solution {private:vector<int> pre_sum;
public:Solution(vector<int>& w) {pre_sum.resize(w.size());pre_sum[0] = w[0];for(int i = 1; i < w.size(); i++) {pre_sum[i] = pre_sum[i-1] + w[i];}}int find(int x) {int l = 0, r = pre_sum.size()-1;while(l < r) { //最终l与r相遇于大于等于pre_sum[mid]的位置int mid = l+r>>1;if(pre_sum[mid] < x) l = mid+1;else r = mid; }return l;}int pickIndex() {int idx = rand()%pre_sum.back()+1;return find(idx);}
};

剑指 Offer II 072. 求平方根

这里平方根取整,等同于最后一个使得 mid∗mid<=xmid*mid <= xmid∗mid<=x 的 midmidmid 。

class Solution {public:int mySqrt(int x) {long long l = 0, r = x;while(l < r) { //l与r最终在 mid*mid <= x 的mid位置相遇long long mid = l+r+1>>1;if(mid*mid <= x) l = mid;  //停的位置性质是什么,看谁=mid所对应的判断条件else r = mid-1;}return l;}
};

剑指 Offer II 073. 狒狒吃香蕉

二分

根据题意结合样例可以知道,求最小的速度 kkk 在至多 hhh 小时吃完。那么我们二分范围就是 [1,1e9][1,1e9][1,1e9] ,使用 checkcheckcheck 判断 midmidmid 速度是否可以吃完,若可以我们就缩小范围即 r=midr = midr=mid,反之 l=mid+1l = mid + 1l=mid+1 。

class Solution {public:bool check(vector<int> &piles, int &h, int &mid) { int time = 0;for(int num: piles) {if(num%mid) time += num/mid + 1;else time += num/mid;}return time <= h;}int minEatingSpeed(vector<int>& piles, int h) {int l = 1, r = 1e9+5;while(l < r) {int mid = l + r >> 1;if(check(piles,h,mid)) r = mid;else l = mid + 1;}return l;}
};

剑指offer专项突击版第24天相关推荐

  1. 剑指 Offer II 022. 链表中环的入口节点(力扣剑指Offer专项突击版——链表2)

    题目 给定一个链表,返回链表开始入环的第一个节点. 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点.如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 po ...

  2. 剑指Offer Ⅱ 005.单词长度的最大乘积 (力扣剑指Offer专项突击版——整数_5)

    题目 给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值.假设字符串中只包含英语的小写字母.如果没有不包含相同字符的一 ...

  3. 剑指Offer Ⅱ 003.二进制加法(力扣剑指Offer专项突击版——整数_3)

    题目 给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组. 示例 1: 输入: n = 2 输出: [0,1,1] 解释: 0 --> 0 1 ...

  4. 剑指Offer Ⅱ 001. 整数除法(力扣剑指Offer专项突击版——整数_1)

    题目 给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 '*'.除号 '/' 以及求余符号 '%' . 注意: 整数除法的结果应当截去(truncate)其小数部分,例如:tr ...

  5. LeetCode刷题 _「剑指 Offer]专项突破版

    第01天 整数 剑指 Offer II 001. 整数除法 class Solution:# 时间复杂度:O(logn), 空间复杂度:O(1)def divideCore(self, dividen ...

  6. 剑指Offer专项突破版(58)—— 日程表

    题目 剑指 Offer II 058. 日程表 思路 假设现在已经有一堆互不冲突的日程了,此时需要新增一个日程k,其开始时间为start,结束时间为end,怎么判断是否和已有的日程冲突呢? 先考虑所有 ...

  7. 剑指offer 专项突破版 74、合并区间

    题目链接 思路 注意合并区间的规则是,对于有重合的区间直接合并(重合意味着某一个区间的头部在另一个区间之中) 所以我们可以先把区间按照区间头排序,然后再挨个判断是否重合~ 注意具体的写法 class ...

  8. 剑指offer 专项突破版 78、合并排序链表

    题目链接 思路 最初的思路是上一题既然实现了归并两个链表,那么我们可以挨个归并~ 归并n-1次就可以,但是这样时间复杂度为O(k²n) class Solution {public ListNode ...

  9. 剑指offer 专项突破版 73、狒狒吃香蕉

    题目链接 思路 这个也是范围内的查找,一开始可以确定狒狒的速度区间应该是[1,maxVal],但是有两个细节需要注意 如何通过piles数组和speed计算时间 result += (pile + s ...

最新文章

  1. open***无法启动日志报错解决方法
  2. 一位老司机谈谈掏心窝子的话
  3. 算法模板——二分图匹配
  4. yii2 pdo mysql 乱码_YII2.0使用PDO连接Oracle库查询结果中文显示乱码问题
  5. 从头认识Spring-1.7 如何通过属性注入Bean?(1)-如何通过属性向对象注入值?...
  6. c语言如何把c程序编译成可执行的exe文件
  7. oracle tovarchar2_oracle数据库中varchar2陷阱
  8. Spring Cloud 与微服务学习总结(16)—— 微服务架构统一安全认证设计与实践
  9. 即时通讯源码_一对一视频直播系统源码是如何实现即时通讯呢?
  10. 18000 Two String 暴力。——— 读题
  11. BI工具那么多 该如何选择
  12. delphi 如何知道 Treeview,Listview 当前最上面显示的节点
  13. 微信API接口访问慢
  14. DFI(Deep/DynamicFlow Inspection,深度/动态流检测)
  15. 谈谈Mysql 字符串连接 CONCAT CONCAT_WS GROUP_CONCAT区别及使用场景
  16. 宽度优先搜索算法-BreadthFirstSearch(BFS)
  17. 最具有催眠功能的网站
  18. 中国超级计算机进500强名单,中国“最强大脑”再次问鼎全球超级计算机500强榜单...
  19. [碎碎念]来谈谈写作这件事
  20. 洛谷P1618 三连击(升级版)

热门文章

  1. 2023年最值得买的旗舰Mini LED电视,TCL Q10H正式发布
  2. [原创]从智能产品防丢器看中外差别
  3. 轨交7号线正式运营 沿线在售升值潜力盘推荐
  4. 何为TLC、MLC、SLC?【转】
  5. 【Java 8】Lambda表达式
  6. 如何解决wordpress安装主题或者插件时候提示:“安装失败:无法创建目录”的问题
  7. jira:恢复数据:AO_187CCC_SIDEBAR_LINK
  8. JPG文件编解码详解
  9. Java写银联支付C扫B经验分享--框架SSM
  10. torch_geometric 介绍