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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    进程控制
    文件、目录操作相关函数
    Linux 系统IO函数 复制文件内容
    gdb调试
    makefile的使用
    GCC编译器
    vim命令的使用
    Linux Ubuntu笔记(常用命令)
    博客搬家(CSDN->博客园)
    level 4
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12686150.html
Copyright © 2011-2022 走看看