zoukankan      html  css  js  c++  java
  • 397. Integer Replacement

    Problem:

    Given a positive integer n and you can do operations as follow:

    If n is even, replace n with n/2.
    If n is odd, you can replace n with either n + 1 or n - 1.
    What is the minimum number of replacements needed for n to become 1?

    Example 1:

    Input:
    8
    
    Output:
    3
    
    Explanation:
    8 -> 4 -> 2 -> 1
    

    Example 2:

    Input:
    7
    
    Output:
    4
    
    Explanation:
    7 -> 8 -> 4 -> 2 -> 1
    or
    7 -> 6 -> 3 -> 2 -> 1
    

    思路

    Solution (C++):

    unordered_map<int, int> visited;
    int integerReplacement(int n) {
        if (n == 1)  return 0;
        if (visited.count(n) == 0) {
            if (n & 1 == 1)
                visited[n] =  2 + min(integerReplacement(n/2), integerReplacement(n/2+1));               
            else 
                visited[n] = 1 + integerReplacement(n/2);
        }
        return visited[n];
    }
    

    性能

    Runtime: 0 ms  Memory Usage: 9.7 MB

    思路

    Solution (C++):

    
    

    性能

    Runtime: ms  Memory Usage: MB

    相关链接如下:

    知乎:littledy

    欢迎关注个人微信公众号:小邓杂谈,扫描下方二维码即可

    作者:littledy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    android作业10.21
    安卓10.7作业
    安卓9.30
    9.23作业
    9.17安卓作业
    6.12作业
    5.29作业
    5.28上机作业
    leetcode 219
    策略模式
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12686150.html
Copyright © 2011-2022 走看看