[LeetCode111双周赛LeetCode359周赛] DP双指针

news2024/11/26 3:29:44

参考灵神和闫总的讲解和代码:
https://www.bilibili.com/video/BV1rP411s7Z5
https://space.bilibili.com/206214

7006. 销售利润最大化

https://leetcode.cn/problems/maximize-the-profit-as-the-salesman/

Solution

动态规划 + 哈希表

首先按照 end 的顺序分组,每个组记录所有以 end 为终点的区间。

f[i+1] 表示不超过 i 的房屋的最大盈利。

  • 若编号 i 的房屋不卖,从上一个编号转移过来,f[i + 1] = f[i]
  • 若卖,需要遍历所有以 i 为终点的区间,找出最大的 f[s] + g
  • 取最大即可
class Solution:
    def maximizeTheProfit(self, n: int, offers: List[List[int]]) -> int:
        groups = [[] for _ in range(n)]
        for s, e, g in offers:
            groups[e].append((s, g))
        # f[i+1] 表示编号不超过 i 的房屋的最大盈利
        f = [0] * (n + 1)
        for end, group in enumerate(groups):
            # 不选
            f[end + 1] = f[end]
            for s, g in group:
                # 选
                f[end + 1] = max(f[end + 1], f[s] + g)
        return f[n]

6467. 找出最长等值子数组

https://leetcode.cn/problems/find-the-longest-equal-subarray/

Solution

同相双指针

在这里插入图片描述

class Solution:
    def longestEqualSubarray(self, nums: List[int], k: int) -> int:
        pos = [[] for _ in range(len(nums) + 1)]
        for i, x in enumerate(nums):
            pos[x].append(i)
        ans = 0
        for ps in pos:
            left = 0
            for right, p in enumerate(ps):
                while p - ps[left] - (right - left) > k:
                    left += 1
                ans = max(ans, right - left + 1)
        return ans

Solution

暴力方法

class Solution:
    def minimumOperations(self, nums: List[int]) -> int:
        # 暴力方法
        res = n = len(nums)
        for i in range(n + 1):
            for j in range(n - i + 1):
                cnt = 0
                for k in range(n):
                    t = -1
                    if k <= i - 1:
                        t = 1
                    elif k <= i + j - 1:
                        t = 2
                    else:
                        t = 3
                    # 有多少不同
                    if t != nums[k]:
                        cnt += 1
                res = min(res, cnt)
        
        return res

最长子序列

@https://leetcode.cn/u/xiongxyowo/
最长递增子序列。为了在最少操作次数内使得数组有序,我们只需要对不在最长递增子序列中的元素进行修改,使其满足递增要求即可。也就是求原数组长度减去最长递增子序列长度。
例如,[1,3,2,1,3,3] 的最长递增子序列为 [1,-,2,-,3,3],我们只需要修改 [-,3,-,1,-,-] 即可。代码如下:

class Solution:
    def minimumOperations(self, nums: List[int]) -> int:
        n = len(nums)
        dp = [1] * n
        for i in range(1, n):
            for j in range(0, i):
                if nums[i] >= nums[j]:
                    dp[i] = max(dp[i], dp[j] + 1)
        return n - max(dp)

DP

最少修改多少个数字可以使数组非递减。定义 a, b, c 分别表示以 1, 2, 3 结尾的前缀数组需要修改的最小次数。

class Solution:
    def minimumOperations(self, nums: List[int]) -> int:
        a, b, c = 0, 0, 0
        for x in nums:
            aa, bb, cc = a, b, c
            if x == 1:
                a = aa # 因为本身就是 1,所以不用修改
                b = min(aa, bb) + 1
                c = min(aa, bb, cc) + 1
            elif x == 2:
                a = aa + 1
                b = min(aa, bb)
                c = min(aa, bb, cc) + 1
            else:
                a = aa + 1
                b = min(aa, bb) + 1
                c = min(aa, bb, cc)
        return min(a, b, c)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UGUI可视化组件Image, RawImage

一.组件Image 1.1 Image的属性 创建的Image对象自带Image组件&#xff0c;用来显示图片&#xff0c;其属性说明如下 属性&#xff1a;功能&#xff1a;Source Image表示要显示的图像的纹理&#xff08;必须作为精灵导入&#xff09;。Color要应用于图像的颜色&#xff0c;会和…

Vs code 使用中的小问题

1.Java在Vs code 中使用单元测试失败或者如何使用单元测试 创建Java项目&#xff0c;或者将要测试的文件夹添加进工作区 要出现lib包&#xff0c;并有两个测试用的jar包 编写测试文件 public class TestUnit{ public static void main(String[] args) {String str "…

伺服电机入门01

伺服电机入门01 伺服电机 电机编码器&#xff0c;电机闭环 电机 &#xff1a; pmsm bldc 有刷电机 acim电机 步进电机等&#xff0c; 编码器&#xff1a;绝对编码器和增量编码器等 编码器入门&#xff1a; 信号&#xff1a; 总线信号 RS422 RS485 基础上面的总线方式 以下面…

TouchGFX之LTDC显示屏

1.根据原理图配置LTDC的GPIO&#xff08;接线方式为RGB565&#xff09;

在线SHA1计算哈希(不可逆的加密又称摘要)工具

具体请前往&#xff1a; 在线计算Sha1摘要工具

图像特征提取与描述

目录 Harris和Shi-Tomas算法Harris角点检测优缺点 Shi-Tomasi⻆点检测SIFT算法 Harris和Shi-Tomas算法 Harris角点检测 dstcv2.cornerHarris(src,blockSize,ksize,k)优缺点 Shi-Tomasi⻆点检测 cornerscv2.goodFeaturesToTrack(image,maxCorners,qualityLevel,minDistance)S…

依赖预构建与静态资源处理

依赖预构建 vite是一个基于浏览器原生ES-Module的前端构建工具。 当你首次启动vite的时候&#xff0c;vite会在本地加载你的站点之前预构建项目依赖。 原因&#xff1a; CommonJS和UMD兼容性&#xff1a;在开发阶段中&#xff0c;Vite的开发服务器将所有的代码视为原生ES模块。…

湘大 XTU OJ 1345 素数字符串 题解:欧拉筛法 前缀和 ‘\0‘ sprintf

链接 素数字符串 题目 题目描述 我们将素数从小到大依次书写&#xff0c;可以得到一个字符串"23571113⋯"&#xff0c;已知一个数码d(0≤d≤9),求字符串在区间[L,R]之间的多少个d? 输入 第一行是一个整数T(1≤T≤10000)&#xff0c;表示样例的个数。 每个样例…

Next.js 13 你需要了解的 8 件事

目录 React 服务器组件 &#xff08;RSC&#xff09;服务器组件默认开启在 Next.js 中客户端组件也在服务器上呈现&#xff01;组成客户端和服务器组件编译Next.js 13 渲染模式桶文件有点坏了库集成&#xff1a;WIP 仍在进行中Route groups 路由组总结 在本文中&#xff0c;我们…

外贸邮箱签名怎么写?改版提升点击率的关键技巧揭秘!

外贸业务常用的一种营销工具就是电子邮件&#xff0c;而电子邮件的签名作为邮件信任度和品牌价值的体现&#xff0c;同样也是非常重要的。那么如何写一份优秀的外贸邮箱签名呢&#xff1f; 下面是几点建议。 第一&#xff0c;突出品牌形象。在签名中加入公司标志或相关图片可以…

【物联网无线通信技术】NFC从理论到实践(FM17XX)

NFC&#xff0c;全称是Near Field Communication&#xff0c;即“近场通信”&#xff0c;也叫“近距离无线通信”。NFC诞生于2004年&#xff0c;是基于RFID非接触式射频识别技术演变而来&#xff0c;由当时的龙头企业NXP(原飞利浦半导体)、诺基亚以及索尼联合发起。NFC采用13.5…

【ElasticSearch】一键安装IK分词器无需其他操作

要注意的时下面命令中的es是我容器的名称&#xff0c;要换成你对应的es容器名 docker exec -it es /bin/bash # 进入容器 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis- ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.1…

Lookup Singularity

1. 引言 Lookup Singularity概念 由Barry WhiteHat在2022年11月在zkResearch论坛 Lookup Singularity中首次提出&#xff1a; 其主要目的是&#xff1a;让SNARK前端生成仅需做lookup的电路。Barry预测这样有很多好处&#xff0c;特别是对于可审计性 以及 形式化验证&#xff…

Dynamic CRM开发 - 实体字段(一)

字段介绍 Dynamic CRM中&#xff0c;实体是CRM业务数据的基本载体&#xff0c;而字段对于实体同样重要&#xff0c;是其核心部分。 CRM中新增实体后&#xff0c;系统会默认为实体创建一些不可编辑&#xff0c;不可删除的字段&#xff0c;如&#xff1a;主键&#xff0c;创建时…

vue路由及打包部署

vue路由&#xff08;前端路由&#xff09;&#xff1a;URL中的hash&#xff08;#号&#xff09;与组件之间的对应关系。 一、安装vue路由 npm install vue-router3.5.1 二、定义路由表 路由表主要记录hash&#xff08;#号&#xff09;与组件之间的对应关系。主要定义在route…

解决SEGGER Embedded Studio无法显示Nordic MCU外设寄存器问题

如果使用SES调试NRF52840的时候发现&#xff0c;官方例程只能显示CPU寄存器&#xff0c;但是无法显示外设寄存器时&#xff0c;解决办法如下&#xff1a; 1.在解决方案右键→Options→Debug→Debugger&#xff0c;然后Target Device选择正确的型号。 2.Register Definition Fil…

RT-Thread 的环形缓冲区 ---- 镜像指示位

可以看一下这篇我写的博客&#xff0c;了解一下大概&#xff1a; RingBuffer 环形缓冲区----镜像指示位_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/132340883?spm1001.2014.3001.5501 【回顾】缓冲区…

Git的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践

Git是一个版本控制系统&#xff0c;用于跟踪和管理软件开发项目中的代码变更。它可以追踪文件的修改、添加和删除&#xff0c;并记录这些变更的历史。Git可以帮助团队成员协同开发&#xff0c;并提供了一种有效的方式来处理并发编辑和代码合并。 在这篇文章中&#xff0c;我们将…

大数据-玩转数据-Flink

一、说明 在电商网站中&#xff0c;订单的支付作为直接与营销收入挂钩的一环&#xff0c;在业务流程中非常重要。对于订单而言&#xff0c;为了正确控制业务流程&#xff0c;也为了增加用户的支付意愿&#xff0c;网站一般会设置一个支付失效时间&#xff0c;超过一段时间不支…