【算法刷题】Day12

文章目录

  • 1004. 最大连续1的个数 III
    • 题干:
    • 算法原理:
      • 1、暴力枚举 + 计数器
      • 2、利用滑动窗口
    • 代码:
  • 746. 使用最小花费爬楼梯
    • 题干:
    • 算法原理:
      • 解法一:
        • 1.1 状态表示
        • 1.2 状态转移方程
        • 1.3 初始化
        • 1.4 填表顺序
        • 1.5 返回值
        • 1.6 代码编写
      • 解法二:
        • 2.1 状态表示
        • 2.2 状态转移方程
        • 2.3 初始化
        • 2.4 填表顺序
        • 2.5 返回值
        • 2.6 代码编写
    • 总结:

1004. 最大连续1的个数 III

在这里插入图片描述

原题链接


题干:

这是一个二进制数组,里面都是 0 和 1
最多翻转 k 个 0
返回连续 1 的最大个数

这个时候,如果真的一个一个翻转然后判断过于麻烦,我们可以通过判断一个区间内,有没有大于 k 个 0,如果有那就翻转不了,如果没有就可以顺利翻转

算法原理:

1、暴力枚举 + 计数器

这个时候,固定一个起点,然后去枚举终点
用计数器来记住里面 0 的个数(这里用的是zero)
在这里插入图片描述

2、利用滑动窗口

由于我们在枚举的可以看到,如果 right 走到了第三个 0 的位置,那么个数超过了k,说明不是结果,如果直接left++ 走到了 第二个 1 的位置
继续遍历,已经会经过第三个 0,依然还要left ++
这样下去,都是一些重复的操作,所以我们对方法一进行优化,让left 直接走到 0 不超过 k
在这里插入图片描述

上述优化就可以用滑动窗口来写

  1. 初始化 left = 0; right = 0;
  2. 进窗口 (right = 1无视,right = 0计数器++)
  3. 判断(zero > k)
  4. 出窗口
  5. 更新结果

代码:

class Solution {
    public int longestOnes(int[] nums, int k) {
        
        int ret = 0;
        for (int right = 0, left = 0, zero = 0; right < nums.length; right++) {
            if (nums[right] == 0) {
                zero++;
            }
            while (zero > k) {
                if (nums[left++] == 0) {
                    zero--;
                }
            }
            ret = Math.max(ret,right - left + 1);
        }
        return ret;
    }
}

在这里插入图片描述

746. 使用最小花费爬楼梯

在这里插入图片描述
在这里插入图片描述
原题链接


题干:

在一个整数数组中,花费 cost[i]可向上走一个或者;两个台阶
可以从 0 或者 1 下标的台阶爬楼梯

这个时候对两个示例进行画图,可以看到,这里的楼顶是数组后面的位置

在这里插入图片描述

算法原理:

解法一:

1.1 状态表示

经验 + 题目要求
以 i 位置为起点…
dp[i] 表示:到达 i 位置时,最小花费

1.2 状态转移方程
  • 用之前 或者 之后的状态,推导出 dp[i] 的值
  • 根据最近的一步,来划分问题

这里到达 i 位置,能从 i-1 或者 i-2 位置到达

在这里插入图片描述
这个时候,状态转移方程就可以求出来了
dp[i] = min( dp[i-1] + cost[i-1] , dp[i-2] + cost[i-2]

1.3 初始化

要保证填表的时候不越界
dp[0] = dp[1] = 0

1.4 填表顺序

从左往右

1.5 返回值

dp[n]

1.6 代码编写
class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int n = cost.length;
        int[] dp = new int[n + 1];
        for (int i = 2; i <= n; i++) {
            dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
        }
        return dp[n];
    }
}

在这里插入图片描述

解法二:

2.1 状态表示

经验 + 要求
以 i 位置为起点…
dp[i] 表示:从 i 位置出发,到达楼顶,此时的最小花费

2.2 状态转移方程

在这里插入图片描述
在这里插入图片描述
dp[i] = min(dp[i+1] + cost[i] , dp[i+2] + cost[i+2]

2.3 初始化

dp[n-1] = cost[n-1]
dp[n-2] = cost[n-2]

2.4 填表顺序

从右往左

2.5 返回值

min( dp[0], dp[1] )

2.6 代码编写
class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int n = cost.length;
        int[] dp = new int[n];
        dp[n - 1] = cost[n - 1];
        dp[n - 2] = cost[n - 2];
        for (int i = n - 3; i >= 0; i--) {
            dp[i] = Math.min(dp[i + 1] , dp[i + 2]) + cost[i];
        }
        return Math.min(dp[0],dp[1]);
    }
}

在这里插入图片描述

总结:

要大胆的去想状态表示和状态转移方程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/217574.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

unity学习笔记18

模型文件属性简介 1.动画类型&#xff1a;一共有四种&#xff1a;无 表示没有动画&#xff0c;旧版 就表示这个模型文件里面的动画片段可以用animation组件来播放的&#xff0c;最后两个 ”泛型“和“人形”都是animator组件来播放的。区别是泛型支持所有类型的动画播放&#x…

LangChain的函数,工具和代理(四):使用 OpenAI 函数进行标记(Tagging) 提取(Extraction)

在上一篇博客LangChain中轻松实现OpenAI函数调用 中我们学习了如何使用Pydantic来生成openai的函数描述对象&#xff0c;并且通过在langchain中调用Pydantic生成的函数描述变量来轻松实现openai的函数调用功能&#xff0c;在此基础上今天我们再介绍两个非常实用的功能&#xff…

vue实现css过渡与css动画

一、过渡和动画的区别 过渡&#xff1a;通常用来表示元素上属性状态的变化。动画&#xff1a;通常用来表示元素运动的情况。 二、使用Vue实现基础得css过渡与动画 1. 动画 /* css */ keyframes leftToRight {0% {transform: translateX(-100px);}50% {transform: translateX(-5…

万兆多模光模块SFP-10G-SR:高速短距传输的最优选

随着信息技术的发展&#xff0c;企业和个人对数据传输速度和带宽需求不断增加。传统的千兆以太网已经不能满足高速数据传输的要求&#xff0c;因此万兆以太网技术崭露头角。作为万兆以太网中的重要组件之一&#xff0c;万兆多模SFP-10G-SR光模块引起了广泛的关注。本文将介绍万…

Sentinel基础知识

Sentinel基础知识 资源 1、官方网址&#xff1a;https://sentinelguard.io/zh-cn/ 2、os-china: https://www.oschina.net/p/sentinel?hmsraladdin1e1 3、github: https://github.com/alibaba/Sentinel 一、软件简介 Sentinel 是面向分布式服务架构的高可用流量防护组件…

【原神游戏开发日志1】缘起

【原神游戏开发日志1】缘起 版权声明 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明 文章内容不得删减、修改、演绎 相关学习资源见文末 大家好&#xff0c;最近看到原神在TGA上频频获奖&#xff0c;作为一个14年经验的游戏开…

springboot集成docker

1、快速构建springboot-demo项目 地址&#xff1a;https://start.spring.io/

【C++】异常处理 ⑧ ( 标准异常类 | 标准异常类继承结构 | 常用的标准异常类 | 自定义异常类继承 std::exception 基类 )

文章目录 一、抛出 / 捕获 多个类型异常对象1、标准异常类2、标准异常类继承结构3、常用的标准异常类 二、自定义异常类继承 std::exception 基类1、自定义异常类继承 std::exception 基类2、完整代码示例 - 自定义异常类继承 std::exception 基类 一、抛出 / 捕获 多个类型异常…

万字长文带你搞定MMUTLBTWU

最近一直在学习内存管理&#xff0c;也知道MMU是管理内存的映射的逻辑IP&#xff0c;还知道里面有个TLB。 今天刚刚好看到了几篇前辈的文章&#xff0c;很是不错&#xff0c;于是这里来一起学习一下吧。 PART 一&#xff1a;MMU 架构篇 MMU&#xff08;Memory Management Uni…

线程池(Linux +C/C++)

参考 手写线程池 - C语言版 | 爱编程的大丙 (subingwen.cn) 1.为什么需要线程池&#xff1f; 1&#xff09;线程问题&#xff1a; &#xff08;1&#xff09;如果只使用线程创建函数&#xff0c;在不断有新的任务进来的时候&#xff0c;需要不断的创建任务&#xff1b;任务在…

Temu数据接口:为开发者提供的强大工具

在如今数字化的时代&#xff0c;数据成为了商业运营中不可或缺的一部分。为了满足开发者对数据获取和分析的需求&#xff0c;Temu平台推出了强大的数据接口&#xff0c;为开发者提供了丰富的API服务。通过Temu数据接口&#xff0c;开发者可以方便地获取商品信息、订单数据、用户…

【Avue】select的远程搜索 [模糊搜索]

一、需求 【模糊搜索】 二、实现avue的远程搜索 1、search为搜索 2、remote远程搜索 3、dictValue{{key}}为输入的值

@Scheduled,Quartz,XXL-JOB三种定时任务总结

Scheduled&#xff0c;Quartz&#xff0c;XXL-JOB三种定时任务总结 一、Scheduled 简介 Scheduled 是 Spring 框架中用于声明定时任务的注解。通过使用 Scheduled 注解&#xff0c;你可以指定一个方法应该在何时执行&#xff0c;无需依赖外部的调度器。 这个注解通常与Enab…

python的安装

python官网地址&#xff1a;https://www.python.org/ 以在windows下安装3.12.0版本为例。 下载安装包&#xff1a; 下载下来的安装包是python-3.12.0-amd64.exe&#xff0c;双击安装&#xff0c;按照提示&#xff0c;一步一步往下走&#xff1a; 到cmd下&#xff0c;输入py…

postgresql pg_hba.conf 配置详解

配置文件之pg_hba.conf介绍 该文件用于控制访问安全性&#xff0c;管理客户端对于PostgreSQL服务器的访问权限&#xff0c;内容包括&#xff1a;允许哪些用户连接到哪个数据库&#xff0c;允许哪些IP或者哪个网段的IP连接到本服务器&#xff0c;以及指定连接时使用的身份验证模…

单片机的扩展结构

目录 三种总线的构造方式 地址空间分配和外部地址锁存器 1.存储器地址空间分配 (1)74LS138 (2)74LS139 2.外部地址锁存器 (1)锁存器74LS373 静态数据存储器RAM的并行扩展 (1)常用的静态RAM (SRAM)芯片 (2)外扩数据存储器的读写操作时序 1.读片外RAM操作时序 2.写片…

JDK8新特性——Stream流

文章目录 一、Stream流体验二、Stream流的创建三、Stream流中间方法四、Stream流终究方法 Stream流&#xff08;也叫Stream API&#xff09;。它是从JDK8以后才有的一个新特性&#xff0c;是专业用于对集合或者数组进行便捷操作的 一、Stream流体验 需求&#xff1a;有一个Lis…

【学习笔记】混淆矩阵

混淆矩阵&#xff08;Confusion Matrix&#xff09;&#xff0c;又称为错误矩阵&#xff0c;是一种特别适用于监督学习中分类问题评估模型性能的工具。在机器学习领域&#xff0c;混淆矩阵能够清晰地显示算法模型的分类结果和实际情况之间的差异&#xff0c;常用于二分类和多分…

vscode里面使用vue的一些插件,方便开发

1、vue 2 Snippets &#xff08;vue语法提示&#xff09; vue提示这个也可以 1.1 Vue VSCode Snippets 2、vetur Vetur支持.vue文件的语法高亮显示&#xff0c;除了支持template模板以外 3、Element UI Snippets(饿了么的提示) 4、indent-rainbow&#xff08;缩进高亮提示) 5…

《开箱元宇宙》:Madballs 解锁炫酷新境界,人物化身系列大卖

你是否曾想过&#xff0c;元宇宙是如何融入世界上最具代表性的品牌和名人的战略中的&#xff1f;在本期的《开箱元宇宙》 系列中&#xff0c;我们与 Madballs 的战略顾问 Derek Roberto 一起聊聊 Madballs 如何在 90 分钟内售罄 2,000 个人物化身系列&#xff0c;以及是什么原…
最新文章