leetcode — 动态规划 — 打家劫舍、完全平方数

news/2024/9/3 14:54:49 标签: leetcode, 动态规划, 算法

1 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

示例 1:

输入:[1,2,3,1]
输出:4
解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。

示例 2:

输入:[2,7,9,3,1]
输出:12
解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
     偷窃到的最高金额 = 2 + 9 + 1 = 12 。

思路:动态规划

1、边界条件

当只有一间房时,则只能偷窃该房

当只有两件房时,则选择偷窃金额大的房间

2、动态规划方程

当偷窃第K间房时,不能偷窃第k-1间房,总金额为前k-2间房的最高金额加上第K间房的金额之和

当偷窃第K-1间房时,偷窃总金额为前k-1间房的最大总金额

dp[i] = max【dp(i-2) + nums[i], dp(i-1)】 

代码

class Solution {
    public int rob(int[] nums) {
        // 数组判空
        if(nums == null || nums.length == 0){
            return 0;
        }
        int length = nums.length;
        if(length == 1){
            return nums[0];
        }
        // 定义动态规划数组 并用于返回最终结果
        int[] dp = new int[length];

        // 定义边界条件
        dp[0] = nums[0];
        dp[1] = Math.max(nums[0], nums[1]);

        // 循环数组 从第三间房开始循环
        for(int i = 2; i < length; i++){
            dp[i] = Math.max(dp[i-2] + nums[i], dp[i-1]);
        }
        return dp[length-1];
    }
}

 2 完全平方数

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149 和 16 都是完全平方数,而 3 和 11 不是。

示例 1:

输入:n = 12

输出:3 
解释:12 = 4 + 4 + 4

示例 2:

输入:n = 13

输出:2
解释:13 = 4 + 9

方法一:动态规划

规划方程:

 这里不理解的点:为什么在后面f[i] = minn + 1?fangfa

class Solution {
    public int numSquares(int n) {
        // 初始化数组 用于存储动态规划过程中的结果
        int[] f = new int[n + 1];
        f[0] = 0;   // 0*0= 0
        for(int i = 1; i <= n; i++){
            // 初始化一个变量用于存储最小平方和
            int minn = Integer.MAX_VALUE;
            // 从1 开始遍历 求平方和
            for(int j = 1; j * j <= i; j++){
                minn = Math.min(minn, f[i - j * j]);
            }
            f[i] = minn + 1;
        }
        return f[n];

    }
}

 方法二:数学【四平方和定理】


http://www.niftyadmin.cn/n/5398085.html

相关文章

uniapp制作简单的tab切换

tab切换是APP开发最常见的功能之一&#xff0c;uniapp中提供了多种形式的tab组件供我们使用。对于简单的页面而言&#xff0c;使用tabbar组件非常方便快捷&#xff0c;可以快速实现底部导航栏的效果。对于比较复杂的页面&#xff0c;我们可以使用tab组件自由定义样式和内容 目录…

SWOT分析法是什么?

SWOT法又称态势分析法&#xff0c;是一种通过分析对象内外部因素从而得出战略结论的分析方法。核心理念在于通过对影响因素进行分类梳理&#xff0c;再通过聚合考虑来得出结论。主要就是四个维度&#xff1a;优势&#xff08;Strengths&#xff09;、劣势&#xff08;Weaknesse…

Git自动忽略dll文件的问题

检查了半天发现是sourcetreee的全局忽略文件导致&#xff0c; 从里面删除dll即可。 我是干脆直接删了全局忽略&#xff0c;太恶心了&#xff0c;如下&#xff1a; #ignore thumbnails created by windows Thumbs.db #Ignore files build by Visual Studio *.exe .vsconfig .s…

EXTJS实现自定义表格

宽度自适应 width: 100%, 高度自适应 height: 100% 同时设置表格所处页面高度100% html,body,#griddemo{height: 100%;} 自定义显示的文本内容 Ext.onReady(function () {Ext.QuickTips.init()function sexText(val) {if (val 0) {return <span style"color:green…

pytorch 图像数据集管理

目录 1.数据集的管理说明 2.数据集Dataset类说明 3.图像分类常用的类 ImageFolder 1.数据集的管理说明 pytorch使用Dataset来管理训练和测试数据集&#xff0c;前文说过 torchvision.datasets.MNIST 这些 torchvision.datasets里面的数据集都是继承Dataset而来&#xff0c…

Linux小项目:在线词典开发

在线词典介绍 流程图如下&#xff1a; 项目的功能介绍 在线英英词典项目功能描述用户注册和登录验证服务器端将用户信息和历史记录保存在数据中。客户端输入用户和密码&#xff0c;服务器端在数据库中查找、匹配&#xff0c;返回结果单词在线翻译根据客户端输入输入的单词在字…

uniapp生成app包引导用户开启通知权限和热更新

uniapp生成app包引导用户开启通知权限和热更新 引导用户开启通知权限 export function setPermissions() {// #ifdef APP-PLUS if (plus.os.name Android) {var main plus.android.runtimeMainActivity();var pkName main.getPackageName();var uid main.getApplicationI…

Python模糊匹配搜索fuzzywuzzy和difflib

文章目录 概述fuzzywuzzyfuzzy模块 difflib 概述 利用python库&#xff1a;fuzzywuzzy及difflib&#xff0c;两个库均可实现词粒度的模糊匹配&#xff0c;同时可设定模糊阈值&#xff0c;实现关键词的提取、地址匹配、语法检查等 fuzzywuzzy pip install fuzzywuzzy from fuz…