当前位置: 首页 > 知识库问答 >
问题:

如何在我的代码中使用回忆录?

戎泰
2023-03-14
class Solution {

    public int rob(int[] nums) {
        return robmax(nums,nums.length-1);    
    }

    public int robmax(int[] nums,int n) {
        int max = 0;
        if(nums.length==0) return 0;
        if(n==1) return Math.max(nums[0],nums[1]);
        if(n==0) return nums[0];
        else{
            max = Math.max(nums[n]+robmax(nums,n-2),robmax(nums,n-1));
        }
        return max;
    }
}

还有,我的算法的运行时复杂度是多少。

共有1个答案

景高杰
2023-03-14

您不需要记忆来解决这个问题,也不需要递归调用。动态编程解决方案将工作得很好,而且要简单得多。您可以在元素上一次找到解决方案。考虑以下算法:

  • 最大值初始化为0
  • 对于每个房子,您可以抢劫的最大值为:
    • 截至房屋[i-2]的最大值+当前房屋的值
    • 截至house[i-1]
    • 的最大值

    也就是说,跟踪截止到前一个房子的已知最大值,以及前一个-前一个。当你到达最后一所房子时,你就有了累计的最大总和。这是大纲,我希望我不会破坏练习:

    public int rob(int[] nums) {
        int max = 0;
        int prev = 0;
        int prevprev = 0;
        for (int current : nums) {
            // TODO: 3 lines to solve the puzzle
        }
        return max;
    }   
    

 类似资料:
  • 我尝试了多种方法来运行它。目的是绘制用户可以点击的圆圈。我无法在JGroup上绘制任何东西。我最初是在扩展JFrame,但意识到我需要扩展JGroup。我正在使用IntelliJ GUI Designer进行布局。我将非常感谢任何帮助。 这是IntelliJ表单设计器文件。 https://pastebin.com/Z3b0PVtZ

  • **这是我要在旧代码中插入的新项目**<?xml 版本=“1.0”encoding=“UTF-8”?> **插入旧代码时显示v7小部件错误**<?xml 版本=“1.0”编码=“UTF-8”?>

  • 问题内容: 这是我的代码: …它打印: 如何打印“哈哈”? 更新: 当我使用以下代码时: …它打印。那不是我想要得到的。 我的IDE是Ulipad,这是IDE的错误吗? 第二次更新: 此代码将正确打印字符: …当我使用这个: …要么… …这是行不通的。如何正确打印变量? 谢谢 问题答案: 您首先需要声明一个编码,因为错误消息说得很清楚- 它甚至告诉您在这里查看详细信息!您的编码大概是。 顺便说一句

  • 问题内容: 我需要编写一个代码来比较Java 和Scala的性能。我很难在我的Java代码中使用Scala 。有人可以发布一个真正简单的“ hello world”示例,该示例如何使用Java代码(在文件中)创建Scala 并在其中添加100个随机数吗? PS:我非常擅长Java,但从未使用过Scala。 问题答案: 与其他方式相比,在Scala中使用Java集合要容易得多,但是由于您提出了以下要

  • 新手,大佬轻点喷,vue2项目,搜索框用的原生,请求数据用的axios 我在项目中写了一个搜索框,目前数据的静态的,我想动态获取数据,但数据是异步请求获取的,如果我像下面直接这样赋值会获取不到值,我想使用promise改写,请问以下应当如何改写 代码:

  • 问题内容: 我已经看到许多有关使用方法的堆栈溢出问题的答案。我还看到用户在他们的评论下说“ apply很慢,应该避免”。 我已经阅读了许多有关性能的文章,这些文章解释得很慢。我还在文档中看到了关于免除apply传递UDF的便捷功能的免责声明(现在似乎找不到)。因此,普遍的共识是,应尽可能避免。但是,这引起了以下问题: 如果apply太糟糕了,那为什么在API中呢? 我应该如何以及何时使代码免费?