Using Greedy Algorithm to Fix the Broken Calculator
- 时间:2020-09-21 09:15:21
- 分类:网络文摘
- 阅读:95 次
On a broken calculator that has a number showing on its display, we can perform two operations:
- Double: Multiply the number on the display by 2, or;
- Decrement: Subtract 1 from the number on the display.
Initially, the calculator is displaying the number X. Return the minimum number of operations needed to display the number Y.
Example 1:
Input: X = 2, Y = 3
Output: 2
Explanation: Use double operation and then decrement operation {2 -> 4 -> 3}.Example 2:
Input: X = 5, Y = 8
Output: 2
Explanation: Use decrement and then double {5 -> 4 -> 8}.Example 3:
Input: X = 3, Y = 10
Output: 3
Explanation: Use double, decrement and double {3 -> 6 -> 5 -> 10}.Example 4:
Input: X = 1024, Y = 1
Output: 1023
Explanation: Use decrement operations 1023 times.Note:
1 <= X <= 10^9
1 <= Y <= 10^9
Greedy Algorithm Fixes the Broken Calculator
A greedy algorithm has a strategy that picks the current optimial solution which will lead to a global optimial solution. But it does not work for all types of problems e.g. Dynamic Programming.
For simplicity, we can look into the problem slightly in a different way. We can transform Y to X, thus only two operations are allows: divided number by two (if it is an even number), and add one to the number.
Dividing by two (if it is an even number) is obviously better (shorter) than do minus, minus, divide, plus, plus. If it is odd number, it seems that we can only increment this number by one.
If Y is smaller than X, then, the greedy approach requires (X – Y) steps. The worst case scenario complexity is O(Max(1, X – Y)).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Solution { public: int brokenCalc(int X, int Y) { int ans = 0; while (X < Y) { if (Y % 2 == 0) { Y /= 2; } else { Y ++; } ans ++; } return ans + X - Y; } }; |
class Solution { public: int brokenCalc(int X, int Y) { int ans = 0; while (X < Y) { if (Y % 2 == 0) { Y /= 2; } else { Y ++; } ans ++; } return ans + X - Y; } };
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:如何更改 WordPress 默认发件人及邮箱地址 免插件为wordpress配置SMTP服务 如何解决wordpress密码设置链接失效的问题 为 wordpress 后台添加“全部设置”选项 如何自定义wordpress默认的图片附件链接方式 关于 wordpress 古腾堡编辑器易出现的两个错误信息 如何在wordpress首页侧边栏小工具中添加和使用短代码 wordpress 5.4 通过区块产出更多内容,又快又简单 如何让wordpress在全国哀悼日变成黑白/灰色调 通过自定义HTML小工具为wordpress添加倒计时模块
- 评论列表
-
- 添加评论