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

力扣(坏了的计算机)

991. 坏了的计算器

在显示着数字 startValue 的坏计算器上,我们可以执行以下两种操作:

  • 双倍(Double):将显示屏上的数字乘 2;
  • 递减(Decrement):将显示屏上的数字减 1 。

给定两个整数 startValue 和 target 。返回显示数字 target 所需的最小操作数。

思路:

暴力做法是分别尝试乘以2和减一找到其中最小的次数,内部是继续不断递归直到等于target才停止。例图会有点像是一个二叉树,每个分支都是乘二或者减一。

简化的做法是反过来找从target进行加一和除以2的操作的情况下变成startvalue的最小次数。

具体做法如下:

当startvalue小于target的时候,偶数则除以2,奇数则加一变成偶数。

当startvalue大于target的时候,因为除以2只能变小,因此只能一直加一直到start value等于target。

这么做会将多种情况化简成一种情况,即奇数加一,偶数除以2。之所以这样更快,是因为对于一个偶数k,要变成另一个数h,假设是先加在除以2,就是(k+w)/2=h,而先除以再加,就是k/2+w/2=h,第一种做法需要w+1次,第二种需要w/2+1次,因此一定是先除以2再加更优。而对于奇数,必须先加才能除以2.

class Solution {
public:int brokenCalc(int startValue, int target) {int n=0;while(startValue<target){if(target%2==1){target++;n++;}target/=2;n++;}return n+startValue-target;}
};


http://www.mrgr.cn/news/13075.html

相关文章:

  • SSRF实现.SSH未创建写shell和SSRF漏洞之FastCGI利用
  • 排序补充之快排的三路划分法
  • 【算法基础实验】图论-Dijkstra最短路径
  • ZooKeeper的节点上下线感知
  • redis | 认识非关系型数据库Redis的哈希数据类型
  • 基于C#.net技术的电子支付系统设计与实现
  • 正则表达式(Regular Expression)
  • day42|完全背包问题 518. 零钱兑换 II 377. 组合总和 Ⅳ 322. 零钱兑换 279.完全平方数 139.单词拆分 多重背包问题
  • 图像处理 -- 图像清晰度测量方法
  • 加州大学圣地亚哥分校 沉浸式遥操作机器人系统
  • Wails实现桌面番茄钟应用
  • 渲染十万条数据的方法之分批渲染
  • 探索微服务架构中的动态服务发现与调用:使用 Nacos 与 Spring Cloud OpenFeign 打造高效订单管理系统
  • JavaWeb基础 -- Spring事务
  • 【Java】Spring Boot使用 Email 传邮件 (上手图解)
  • c语言跨文件传输数据
  • mysql 悲观锁使用
  • Selenium 自动化测试框架 API 详解
  • 【binder】【android12】【2.servicemanager启动——全源码分析】
  • Midjourney Describe API 的对接和使用