当前位置: 首页 > news >正文

C++二分查找算法的应用:最小好进制

本文涉及的基础知识点

二分查找

题目

以字符串的形式给出 n , 以字符串的形式返回 n 的最小 好进制 。
如果 n 的 k(k>=2) 进制数的所有数位全为1,则称 k(k>=2) 是 n 的一个 好进制 。
示例 1:
输入:n = “13”
输出:“3”
解释:13 的 3 进制是 111。
示例 2:
输入:n = “4681”
输出:“8”
解释:4681 的 8 进制是 11111。
示例 3:
输入:n = “1000000000000000000”
输出:“999999999999999999”
解释:1000000000000000000 的 999999999999999999 进制是 11。
参数范围
n 的取值范围是 [3, 10^18]
n 没有前导 0

分析

值相等,进制越小,位数越多。进制最小是2,1018大约是264次方,放宽些,假定最大长度为70
求最小的k,也就是最大的位数对应的进制
主函数,从大到小尝试各位数能否存在好进制
Is函数利用二分法判断是否存k进制的m位1刚好等于n,如果存在则返回k,否则返回0。
由于n>=3,所以11一定是好进制。也就是本题一定有解。
Cmp函数:k进制的m个1和n的大小比较,n大返回正数,相等返回0,n小返回负数。llHas记录当前位的值。
注意:各值的范围

代码

class Solution {
public:
string smallestGoodBase(string n) {
long long llN = 0;
for (const auto& ch : n)
{
llN = (llN * 10 + ch - ‘0’);
}
for (int i = 70; i > 2; i–)
{
long long llRet = Is(i, llN);
if (llRet > 0 )
{
return std::to_string(llRet);
}
}
return std::to_string(llN-1);
}
long long Is(int m, long long n)
{
long long left = 2, right = n + 1;
while (right - left > 0 )
{
const auto mid = left + (right - left) / 2;
const auto llRet = Cmp(mid, m, n);
if (0 == llRet)
{
return mid;
}
if (llRet > 0)
{
left = mid+1;
}
else
{
right = mid;
}
}
return 0;
}
//k进制的m个1和n的大小比较,n大返回正数,相等返回0,n小返回负数
long long Cmp(long long k, int m, long long n)
{
long long llHas = 1;
for (; m > 0; m–)
{
if (n < llHas)
{
return -1;
}
n -= llHas;
if (m > 1)
{// 最后一次llHas并不使用,所以越界不影响
if (LLONG_MAX / k < llHas)
{
return -1;
}
llHas *= k;
}
}
return n;
}
};

测试用例

template
void Assert(const T& t1, const T& t2)
{
assert(t1 == t2);
}

template
void Assert(const vector& v1, const vector& v2)
{
if (v1.size() != v2.size())
{
assert(false);
return;
}
for (int i = 0; i < v1.size(); i++)
{
Assert(v1[i] ,v2[i]);
}
}

int main()
{
Solution slu;
string res;
res = slu.smallestGoodBase(“470988884881403701”);
Assert(res, std::string(“686286299”));
res = slu.smallestGoodBase(“2251799813685247”);
Assert(res, std::string(“2”));
res = slu.smallestGoodBase(“13”);
Assert(res, std::string(“3”));
res = slu.smallestGoodBase(“4681”);
Assert(res, std::string(“8”));
res = slu.smallestGoodBase(“1000000000000000000”);
Assert(res, std::string(“999999999999999999”));
res = slu.smallestGoodBase(“1333”);
Assert(res, std::string(“36”));
res = slu.smallestGoodBase(“463381”);
Assert(res, std::string(“463380”));

//CConsole::Out(res);

}

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快

速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

充满正能量得对大家说
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
墨家名称的来源:有所得以墨记之。
算法终将统治宇宙,而我们统治算法。《喜缺全书》

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开

发环境: VS2022 C++17

相关文章:

C++二分查找算法的应用:最小好进制

本文涉及的基础知识点 二分查找 题目 以字符串的形式给出 n , 以字符串的形式返回 n 的最小 好进制 。 如果 n 的 k(k>2) 进制数的所有数位全为1&#xff0c;则称 k(k>2) 是 n 的一个 好进制 。 示例 1&#xff1a; 输入&#xff1a;n “13” 输出&#xff1a;“3” …...

2022年12月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 列表L1中全是整数&#xff0c;小明想将其中所有奇数都增加1&#xff0c;偶数不变&#xff0c;于是编写了如下图所示的代…...

行业安卓主板-基于RK3568/3288/3588的AI视觉秤/云相框/点餐机/明厨亮灶行业解决方案(一)

AI视觉秤 单屏Al秤集成独立NPU&#xff0c;可达0.8Tops算力&#xff0c;令AI运算效率大幅提升&#xff0c;以实现生鲜商品快速准确识别&#xff0c;快速称重打印标签&#xff0c;降低生鲜门店运营成本&#xff0c;缓解高峰期称重排队拥堵的现象&#xff0c;提高称重效率&#…...

fo-dicom缺少DicomJpegLsLosslessCodec

VS2019&#xff0c;fo-dicom v4.0.8 using Dicom.Imaging.Codec; ... DicomJpegLsLosslessCodec //CS0103 当前上下文中不存在名称“DicomJpegLsLosslessCodec” 但官方文档的确存在该类的说明DicomJpegLsLosslessCodec 尝试&#xff1a;安装包fo-dicom.Codecs&#xff0c;注…...

跳跳狗小游戏

欢迎来到程序小院 跳跳狗 玩法&#xff1a;一直弹跳的狗狗&#xff0c;鼠标点击屏幕左右方向键进行弹跳&#xff0c;弹到不同物品会有不同的分数减扣&#xff0c;规定的时间3分钟内完成狗狗弹跳&#xff0c;快去跳跳狗吧^^。开始游戏https://www.ormcc.com/play/gameStart/198…...

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境 文章目录 CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境一、前言二、资料收集三、Ubuntu18.04从安装到更换实时内核1、下载安装Ubuntu18.042、下载安装实时内核&#xff0c;解决编…...

shell_70.Linux调整谦让度

调整谦让度 1.nice 命令 (1)nice 命令允许在启动命令时设置其调度优先级。要想让命令以更低的优先级运行&#xff0c;只需用nice 命令的-n 选项指定新的优先级即可&#xff1a; $ nice -n 10 ./jobcontrol.sh > jobcontrol.out & [2] 16462 $ $ ps -p 16462 -o pid,…...

【jvm】虚拟机栈

目录 一、背景二、栈与堆三、声明周期四、作用五、特点&#xff08;优点&#xff09;六、可能出现的异常七、设置栈内存大小八、栈的存储单位九、栈运行原理十、栈帧的内部结构10.1 说明10.2 局部变量表10.3 操作数栈10.4 动态链接10.5 方法返回地址10.6 一些附加信息 十一、代…...

Flink SQL Over 聚合详解

Over 聚合定义&#xff08;⽀持 Batch\Streaming&#xff09;&#xff1a;**特殊的滑动窗⼝聚合函数&#xff0c;拿 Over 聚合 与 窗⼝聚合 做对⽐。 窗⼝聚合&#xff1a;不在 group by 中的字段&#xff0c;不能直接在 select 中拿到 Over 聚合&#xff1a;能够保留原始字段…...

【鸿蒙软件开发】ArkUI之容器组件Counter(计数器组件)、Flex(弹性布局)

文章目录 前言一、Counter1.1 子组件1.2 接口1.3 属性1.4 事件 1.5 示例代码二、Flex弹性布局到底是什么意思&#xff1f; 2.1 权限列表2.2 子组件2.3 接口参数 2.4 示例代码示例代码1示例代码2 总结 前言 Counter容器组件&#xff1a;计数器组件&#xff0c;提供相应的增加或…...

PyTorch入门学习(十一):神经网络-线性层及其他层介绍

目录 一、简介 二、PyTorch 中的线性层 三、示例&#xff1a;使用线性层构建神经网络 四、常见的其他层 一、简介 神经网络是由多个层组成的&#xff0c;每一层都包含了一组权重和一个激活函数。每层的作用是将输入数据进行变换&#xff0c;从而最终生成输出。线性层是神经…...

农业水土环境与面源污染建模及对农业措施响应

目录 ​专题一 农业水土环境建模概述 专题二 ArcGIS入门 专题三 农业水土环境建模流程 专题四 DEM数据制备流程 专题五 土地利用数据制备流程 专题六 土壤数据制备流程 专题七 气象数据制备流程 专题八 农业措施数据制备流程 专题九 参数率定与结果验证 专题十 模型结…...

回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测(多指标、多图)

回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测&#xff08;多指标、多图&#xff09; 目录 回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测&#xff08;多指标、多图&#xff09;效果一览基本介绍程序设计参考资料 效果一览…...

扫地机器人遇瓶颈?科沃斯、石头科技“突围”

曾经&#xff0c;扫地机器人行业也曾有过高光时刻&#xff0c;而如今&#xff0c;扫地机器人已然告别高增长阶段&#xff0c;增速开始放缓。据中怡康零售推总数据显示&#xff0c;2023年上半年&#xff0c;中国扫地机器人市场规模为63.6亿元人民币&#xff0c;同比下滑了0.6%&a…...

基于SSM的防疫信息登记系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

VBA将字典按照item的值大小排序key

方法&#xff1a;利用数组交换位置 sub 字典排序() s 0 Dim arr(dic1.keys)将字典key和value存入一个数组中 For Each ke In dic1.keysarr(s) Array(ke, dic1(ke))s s 1 Next进行排序 For i LBound(arr) To UBound(arr) - 1For j i 1 To UBound(arr)If arr(i)(1) >…...

MySQL第四讲·如何正确设置主键?

你好&#xff0c;我是安然无虞。 文章目录 主键&#xff1a;如何正确设置主键&#xff1f;业务字段做主键自增字段做主键手动赋值字段做主键 主键总结 主键&#xff1a;如何正确设置主键&#xff1f; 前面我们在讲解存储的时候&#xff0c;有提到过主键&#xff0c;它可以唯一…...

K8S知识点(三)

&#xff08;1&#xff09;环境搭建-环境初始化 Centos的版本是有要求的必须是7.5或以上&#xff0c;否则安装出来的集群是有问题的Node节点可能加入不到集群中来 详细步骤 1.同时连接三台服务器&#xff1a;查看一下版本 是否正确 2.主机名解析&#xff0c;方便节点之间的…...

c语言刷题(9周)(6~10)

输入10个不等的整数创建数组a[10]&#xff0c;在数组a中找是否存在整数t。若存在显示找到了及下标位置&#xff0c;若不存在显示error。 题干输入10个不等的整数创建数组a[10]&#xff0c;在数组a中找是否存在整数t。若存在显示找到了及下标位置&#xff0c;若不存在显示error…...

SpringBoot集成-阿里云对象存储OSS

文章目录 阿里云 OSS 介绍准备工作SpringBoot 集成 OSS 阿里云 OSS 介绍 阿里云对象存储 OSS &#xff08;Object Storage Service&#xff09;&#xff0c;是一款海量、安全、低成本、高可靠的云存储服务。使用 OSS&#xff0c;你可以通过网络随时存储和调用包括文本、图片、…...

fastapi-Headers和Cookies

在FastAPI中&#xff0c;Headers是一个特殊的类型&#xff0c;用于处理HTTP请求头&#xff08;Headers&#xff09;。Headers允许你接收、访问和修改HTTP请求中的头部信息。 使用Headers&#xff0c;你可以在FastAPI的路由视图中将请求头作为参数接收&#xff0c;并对它们进行…...

云计算的思想、突破、产业实践

文章目录 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。&#x1f30e;跑过十五…...

【漏洞复现】Apache_HTTP_2.4.49_路径穿越漏洞(CVE-2021-41773)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞验证方式一 curl方式二 bp抓包 说明内容漏洞编号CVE-2021-41773漏洞名称Apache HTTP 路径穿越漏洞漏…...

AD9371 官方例程 NO-OS 主函数 headless 梳理

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…...

WSL 下载

可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符&#xff0c;方法是右键单击并选择“以管理员身份运行”&#xff0c;输入 wsl --install 命令&#xff0c;然后重启计算机。 首先查看可以下载的版本 最后再运行wsl --ins…...

虚拟dom及diff算法之 —— snabbdom

源码&#xff1a;https://github.com/snabbdom/snabbdom 测试环境搭建 npm i -S snabbdom 安装好的node_modules提供了js和ts的代码&#xff1a;build&#xff1a;js代码&#xff0c;src&#xff1a;ts代码 npm i -D webpack5 webpack-cli3 webpack-dev-server3 webpack&#x…...

毅速丨3D打印结合拓扑优化让轻量化制造更容易

轻量化可以减少产品的重量&#xff0c;提高产品的性能和效率&#xff0c;同时减少能源消耗和排放。尤其在航空航天、汽车制造造等行业对轻量化追求更高。当前&#xff0c;随着制造技术的发展&#xff0c;拓扑优化结合3D打印为轻量化制造带来的显著的优势正在逐渐凸显。 首先&am…...

CentOS 7使用RPM包安装MySQL5.7

目标 本文目标是简单介绍如何在CentOS 7上使用RPM包安装MySQL 5.7&#xff0c;然后描述如何调整存储路径datadir。 环境准备 操作系统 —— CentOS 7MySQL版本 —— MySQL 5.7.44 获取MySQL-rpm包 官网下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.htm…...

UI设计工具都哪些常用的,推荐这5款

对于UI设计师来说&#xff0c;日常工作无非是围绕“需求分析”→设计实施→“开发交付”这三个环节来进行。 然而&#xff0c;在每个环节中&#xff0c;设计师使用的工具却完全不同。在这里&#xff0c;我收集整理了UI设计师在日常工作中常用的五种工具&#xff0c;希望能为新…...

小饭店点餐系统,小餐馆点餐怎么方便,操作简单的酒店点单软件

小饭店点餐系统&#xff0c;小餐馆点餐怎么方便&#xff0c;操作简单的酒店点单软件 今天给大家分享是 佳易王酒店点餐管理系统软件V16.0版本&#xff0c;点餐界面如下图&#xff0c; 1、开台的桌子醒目显示&#xff0c;结账后或没有开台的桌子为灰色显示。 2、多种点餐方式…...