Leetcode 3013. Divide an Array Into Subarrays With Minimum Cost II

  • Leetcode 3013. Divide an Array Into Subarrays With Minimum Cost II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3013. Divide an Array Into Subarrays With Minimum Cost II

1. 解题思路

这一题的话思路上的话我一开始是想着偷懒直接用动态规划,结果果然还是遇到了超时的问题,因为事实上要遍历index和 i 1 i_1 i1事实上也是一个 O ( N 2 ) O(N^2) O(N2)的算法复杂度,并不怎么现实。

但是后来我转念一想,这道题感觉我还是想复杂了,因为题目限制要求 i k − 1 − i 1 ≤ d i_{k-1} - i_1 \leq d ik1i1d,因此事实上就是要在长度为 d d d的窗口区间当中分为 k k k段,然后考察其中靠后的 k − 1 k-1 k1段的开头元素的最小值。而这个事实上又完全等价于在这个长度为 d d d的窗口当中找出 k − 1 k-1 k1个最小的元素即可。

因此,这道题也只需要遍历所有长度为 d d d的窗口,然后考察其中最小的 k − 1 k-1 k1个元素的和的最小值然后加上第一个元素即可,而这就可以解答了,我们只需要用一个滑动窗口然后维护一下其中的各个元素以及前 k − 1 k-1 k1个元素的和即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minimumCost(self, nums: List[int], k: int, dist: int) -> int:
        n = len(nums)
        elems = sorted(nums[1:dist+2])
        s = sum(elems[:k-1])
        ans = s
        for i in range(dist+2, n):
            idx = bisect.bisect_left(elems, nums[i])
            if idx < k-1:
                s = s + nums[i] - elems[k-2]
            elems.insert(idx, nums[i])
            
            idx = bisect.bisect_left(elems, nums[i-dist-1])
            if idx < k-1:
                s = s - elems[idx] + elems[k-1]
            elems.pop(idx)
            
            ans = min(ans, s)
        return ans + nums[0]

提交代码评测得到:耗时2315ms,占用内存31.3MB。


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

相关文章

部署Golang服务

独立部署 对于简单的项目&#xff0c;通常我们只需要将编译后的二进制文件拷贝到服务器上&#xff0c;然后设置为后台守护进程运行即可。 本文以项目&#xff1a;https://github.com/johncxf/go_practice 为例 编译 编译为 linux 系统可执行的二进制文件&#xff0c;二进制…

Java 8 新特性之Lambda表达式

目录 函数接口Lambda表达式书写方法引用 函数式编程&#xff08;Functional Programming&#xff09;是把函数作为基本运算单元&#xff0c;函数可以作为变量&#xff0c;可以接收函数&#xff0c;还可以返回函数。历史上研究函数式编程的理论是Lambda演算&#xff0c;所以我们…

学习使用 curl

一、简介 curl 是一个非常有用的网站开发工具。 curl 是常用的命令行工具——客户端&#xff08;client&#xff09;的 URL 工具——curl 用来请求 Web 服务器。 curl 支持多种协议。curl 命令行参数多达几十种。如果熟练的话&#xff0c;完全可以取代 Postman 这一类的图形界…

《Linux高性能服务器编程》笔记04

Linux高性能服务器编程 本文是读书笔记&#xff0c;如有侵权&#xff0c;请联系删除。 参考 Linux高性能服务器编程源码: https://github.com/raichen/LinuxServerCodes 豆瓣: Linux高性能服务器编程 文章目录 Linux高性能服务器编程第09章I/O复用9.1 select系统调用9.2 po…

CTFhub-bak文件

CTFhub-Web-信息泄露-备份文件下载-bak文件 题目信息 解题过程 看到提示说和index.php有关&#xff0c;在url后面加index.php.bak&#xff0c;跳转到http://challenge-7a4da2076cfabae6.sandbox.ctfhub.com:10800/index.php.bak网址&#xff0c;即&#xff1a; 跳转到下载页…

nginx 搭建docker 似有hub仓库

当使用 SSL/TLS 证书并希望通过 HTTPS 访问 Docker Registry 时&#xff0c;通常会使用 Nginx 作为反向代理。这样做可以为 Docker Registry 提供 HTTPS 支持&#xff0c;同时还可以利用 Nginx 的其他功能&#xff0c;如负载均衡和缓存。下面是使用 Nginx 作为反向代理设置私有…

34、StoHisNet:CNN+Transformer结合首次用于胃病理图像4分类[奔狼怎配质疑雄狮!]

本文由贵州大学医学院&#xff0c;贵州省人民医院医学影像教研室&#xff0c;精密影像诊疗国际示范合作基地&#xff0c;贵州大学计算机科学与技术学院&#xff0c;清华大学北京信息科学与技术国家研究中心&#xff0c;共同合作&#xff0c;于2022年5月28日发表于<Computer …

【征服redis14】认真理解一致性Hash与Redis的三种集群

前面我们介绍了主从复制的方式和sentinel方式&#xff0c;这里我们看第三种模式-Cluster方式。 目录 1.前两种集群模式的特征与不足 2.Cluster模式 2.1 Cluster模式原理 2.2 数据分片与槽位 2.3 Cluster模式配置和实现 3.一致性Hash 3.1 哈希后取模 3.2 一致性Hash算法…