LeetCode 1618. 找出适应屏幕的最大字号(二分查找)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给定一个字符串 text。并能够在 宽为 w 高为 h 的屏幕上显示该文本。

字体数组中包含按升序排列的可用字号,您可以从该数组中选择任何字体大小。

您可以使用FontInfo接口来获取任何可用字体大小的任何字符的宽度和高度。

FontInfo接口定义如下:

interface FontInfo {// 返回 fontSize 大小的字符 ch 在屏幕上的宽度。// 每调用该函数复杂度为 O(1)public int getWidth(int fontSize, char ch);// 返回 fontSize 大小的任意字符在屏幕上的高度。// 每调用该函数复杂度为 O(1)public int getHeight(int fontSize);
}

一串字符的文本宽度应该是每一个字符在对应字号(fontSize)下返回的宽度getHeight(fontSize)的总和

请注意:文本最多只能排放一排

如果使用相同的参数调用 getHeight 或 getWidth ,则可以保证 FontInfo 将返回相同的值。

同时,对于任何字体大小的 fontSize 和任何字符 ch :

getHeight(fontSize) <= getHeight(fontSize+1)
getWidth(fontSize, ch) <= getWidth(fontSize+1, ch)

返回可用于在屏幕上显示文本的最大字体大小
如果文本不能以任何字体大小显示,则返回 -1。

示例 1:
输入: text = "helloworld", w = 80, h = 20, fonts = [6,8,10,12,14,16,18,24,36]
输出: 6Example 2:
输入: text = "leetcode", w = 1000, h = 50, fonts = [1,2,4]
输出: 4Example 3:
输入: text = "easyquestion", w = 100, h = 100, fonts = [10,15,20,25]
输出: -1注意:
1 <= text.length <= 50000
text 只包含小写字母
1 <= w <= 10^7
1 <= h <= 10^4
1 <= fonts.length <= 10^5
1 <= fonts[i] <= 10^5
fonts 已经按升序排序,且不包含重复项。

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

2. 解题

  • 根据题目的条件,有序,可以使用二分查找,先找出满足高度的最大字符
  • 再找出宽度也满足的最大字体
/*** // This is the FontInfo's API interface.* // You should not implement it, or speculate about its implementation* class FontInfo {*   public:*     // Return the width of char ch when fontSize is used.*     int getWidth(int fontSize, char ch);*     *     // Return Height of any char when fontSize is used.*     int getHeight(int fontSize)* };*/
class Solution {vector<long long> ct;
public:int maxFont(string text, int w, int h, vector<int>& fonts, FontInfo fontInfo) {int n = fonts.size(), m = text.size();int l = 0, r = n-1, mid, rm = -1, ans = -1;ct.resize(26);for(auto c : text)ct[c-'a']++;while(l <= r){mid = (l+r)>>1;if(fontInfo.getHeight(fonts[mid]) > h)r = mid-1;else{rm = mid;l = mid+1;}}if(rm == -1) return -1;//高度容不下l = 0, r = rm;while(l <= r){mid = (l+r)>>1;if(!ok_width(fontInfo,fonts[mid],w))r = mid-1;else{ans = mid;l = mid+1;}}return ans==-1 ? -1 : fonts[ans];}bool ok_width(FontInfo& fontInfo, int fsize, int w){long long tot = 0;for(int i = 0; i < 26; ++i){tot += fontInfo.getWidth(fsize, 'a'+i)*ct[i];if(tot > w)return false;}return true;}
};

52 ms 14.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UML类图画法及类之间几种关系

文章目录如下&#xff1a; 一、类图画法 二、类之间的几种关系&#xff1a;泛化&#xff08;Generalization&#xff09;、实现&#xff08;Realization&#xff09;、关联&#xff08;Association&#xff09;&#xff08;又分一般关联、聚合&#xff08;Aggregation&#xff…

web前端知识点太多_web前端常见知识点

csstable布局的缺点1、Table要比其它html标记占更多的字节。(延迟下载时间&#xff0c;占用服务器更多的流量资源。)2、Tablle会阻挡浏览器渲染引擎的渲染顺序。(会延迟页面的生成速度&#xff0c;让用户等待更久的时间。)3、Table里显示图片时需要你把单个、有逻辑性的图片切成…

python可变参数教学,Python函数可变参数详解

在实际使用函数时&#xff0c;可能会遇到“不知道函数需要接受多少个实参”的情况&#xff0c;不过好在 Python 允许函数从调用语句中收集任意数量的实参。例如&#xff0c;设计一个制作披萨的函数&#xff0c;我们知道&#xff0c;披萨中可以放置很多种配料&#xff0c;但无法…

LeetCode 1634. 求两个多项式链表的和

文章目录1. 题目2. 解题1. 题目 多项式链表是一种特殊形式的链表&#xff0c;每个节点表示多项式的一项。 每个节点有三个属性&#xff1a; coefficient&#xff1a;该项的系数。项 9x4 的系数是 9 。power&#xff1a;该项的指数。项 9x4 的指数是 4 。next&#xff1a;指向…

进制A~Z,全字母26进制转化

public String to26( int x ) { StringBuffer sBuffer new StringBuffer(); int cur; x; while( x > 0 ) { sBuffer.append((char)( (( cur x % 26 ) 0 ? 25 : cur - 1) A) );x / 26; if( cur 0 ) x--; } sBuffer.reverse(); return sB uffer.toString(); } private …

es6 类的私有属性_JavaScript ES6类中的私有属性

要扩展loganfsmyth的回答&#xff1a;JavaScript中唯一真正私有的数据仍然是作用域变量。不能以与公共属性相同的方式在内部访问私有属性&#xff0c;但是可以使用范围变量来存储私有数据。作用域变量这里的方法是使用构造函数的作用域(它是私有的)来存储私有数据。要使方法能够…

python编程制作接金币游戏,闪电侠接金币的FlashMan类

python the Flash man catch coin gif animation闪电侠是美剧&#xff0c;这里是一个小游戏&#xff0c;操作闪电侠接不断冒出来的金币。本模块定义了FlashMan类。这个模块能单独运行&#xff0c;运行后用鼠标操作闪电侠移动即可。以下是部分代码预览&#xff1a;""&…

LeetCode 1660. 纠正二叉树(BFS)

文章目录1. 题目2. 解题1. 题目 你有一棵二叉树&#xff0c;这棵二叉树有个小问题&#xff0c;其中有且只有一个无效节点&#xff0c;它的右子节点错误地指向了与其在同一层且在其右侧的一个其他节点。 给定一棵这样的问题二叉树的根节点 root &#xff0c;将该无效节点及其所…

MS SQL Server 常用操作

以下为常用&#xff1a; --发邮件应该很常用吧 exec msdb.dbo.sp_send_dbmailprofile_name mail_profile, --邮件配置主档&#xff0c;通过数据库邮件配置向导生成&#xff0c;一般叫dba_profile,详细看下图recipients email_recipients, --地址&#xff0c;多个用英文逗号隔…

arduino yun 京东_Arduino发布多款全新升级产品,宣布将成立Arduino基金会

上海2015年10月23日电 /美通社/ -- 10月18日上午&#xff0c;全球知名开源硬件供应商 Arduino 全球首席执行官 Federico Musto 现身上海创客嘉年华发表演讲。演讲中 Federico 发布了 Arduino Uno Pro、Arduino M0 S、 Arduino Leonardo XS、 Arduino Uno XS 以及机械手臂套件 B…

php 检测编码函数,自己写了一个php检测文件编码的函数

关于文件编码的检测&#xff0c;百度一下一大把都是&#xff0c;但是确实没有能用的、很多人建议 mb_detect_encoding 检测&#xff0c;可是不知为何我这不成功&#xff0c;什么都没输出、看到有人写了个增强版&#xff0c;用 BOM 判断的&#xff0c;我果断就无视了&#xff0c…

LeetCode 1730. 获取食物的最短路径(BFS)

文章目录1. 题目2. 解题1. 题目 你现在很饿&#xff0c;想要尽快找东西吃。你需要找到最短的路径到达一个食物所在的格子。 给定一个 m x n 的字符矩阵 grid &#xff0c;包含下列不同类型的格子&#xff1a; * 是你的位置。矩阵中有且只有一个 * 格子。 # 是食物。矩阵中可…

python线程任务run_python线程、进程知识梳理

一.python线程线程用于提供线程相关的操作&#xff0c;线程是应用程序中工作的最小单元。&#xff03;&#xff01;/ usr / bin / env python&#xff03; - * - coding&#xff1a;utf-8 - * -import threadingimport timedef show(arg)&#xff1a;time.sleep(1)printthread …

jrtplib使用注意事项

一、说明 RTP 现在的问题是要解决的流媒体的实时传输的问题的最佳方法。和JRTPLIB 是一个用C语言实现的RTP库。包含UDP通讯。刚使用JRTPLIB&#xff0c;对JRTPLIB的理解还不够深&#xff0c;当做使用时&#xff0c;积累的一些经验写个笔记吧。 二、RTP协议 实时传送协议&#x…

oracle字符串使用函数,Oracle常用函数介绍之一(字符串)

最近工作需要从Excel 导入一些数据&#xff0c;由于源数据的不规范&#xff0c;需要进行数据的清洗工作&#xff0c;需要自己把耽误多日的Oracle 函数重新巩固一下。搜集了一些网络资料&#xff0c;整理下来&#xff0c;以供自己以后查对。1. ASCII返回与指定的字符对应的十进制…

JAVA中获得一个月最大天数的方法(备忘)

Calendar 类是一个抽象类&#xff0c;为日历字段之间的转换提供了一些方法。其中有一个重要方法 getActualMaximum &#xff0c;该方法用于返回指定日历字段实际的最大值。 利用这个方法(Calendar.getActualMaximum)&#xff0c;我们可以获得某年某月的天数。 代码如下&#xf…

LeetCode 1874. 两个数组的最小乘积和

文章目录1. 题目2. 解题1. 题目 给定两个长度相等的数组a和b&#xff0c;它们的乘积和为数组中所有的a[i] * b[i]之和&#xff0c;其中 0 < i < a.length。 比如a [1,2,3,4]&#xff0c;b [5,2,3,1]时&#xff0c;它们的乘积和为 1*5 2*2 3*3 4*1 22 现有两个长…

eplise怎么连接数据库_eclipse连接mysql

JDBC代表Java数据库连接(Java Database Connectivity)&#xff0c;它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API&#xff0c;换句话说&#xff1a;JDBC是用于在Java语言编程中与数据库连接的API。到www.mvnrepository.com网站中&#xff0c;搜索mysql&…

【NS2】在linux下安装低版本GGC

1、下载安装包&#xff0c;cd到文件所在目录 sudo dpkg -i gcc41-compat-4.1.2-ubuntu1210_i386.deb g41-compat-4.1.2_i386.deb 2、查看安装到系统的gcc ls /usr/bin/gcc* 3、 下载完包之后&#xff0c;建议是直接sudo dkpg -i *.deb这样安装 由于gcc安装互相有版本的支持&…

oracle+资料类型不一致吗,oracle数据库中,字段类型不一致,导致查询慢

最近一个WEBSERVICE突然变慢了&#xff0c;后查询发现&#xff0c;后台查询也非常慢(记录条数800多万)&#xff0c;索引也有&#xff0c;如下语句SELECT P.ID,P.RECORD_ID,P.KEY_NAME,P.KEY_CONTENTFROM MED_EMR_PATIENT_RECORD R,MED_EMR_RECORD_EXTRACTINFO PWHERE R.ID P.R…