当前位置: 首页 > news >正文

建设集约化网站的进展情况微网站制作提供商推荐

建设集约化网站的进展情况,微网站制作提供商推荐,建筑模板的规格及价格,短视频广告分析LC1793. 好子数组的最大分数 题目描述 给你一个整数数组 nums &#xff08;下标从 0 开始&#xff09;和一个整数 k 。 一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i1], ..., nums[j]) * (j - i 1) 。 一个 好 子数组的两个端点下标需要满足 i < k < j 。 请…

LC1793. 好子数组的最大分数

题目描述

给你一个整数数组 nums (下标从 0 开始)和一个整数 k 。
一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1) 。
一个 好 子数组的两个端点下标需要满足 i <= k <= j 。
请你返回 好 子数组的最大可能 分数 。
1 <= nums.length <= 10^5
1 <= nums[i] <= 2 * 10^4

分析

数据要求非常高,n是1e5级别的,也就是O(n^3)、O(n^2)时间复杂度的算法都无法AC,所以正解只有O(n)或者O(n logn)的算法才能通过。本题正解是O(n)

暴力解法1:纯蛮力

三重循环,枚举i,再枚举j,再枚举i~j求出最小值

时间复杂度O(n^3)

for i in range(n):for j in range(i,n):mi = inffor k in range(i,j+1):mi = min(mi,nums[k])ans = max(ans,mi*(j-i+1))

这个暴力解法可以优化成O(n^2),就是先预处理出来mi[i][j],表示i~j的最小值。但是时间还是不满足题意

暴力解法2:贡献思维

枚举nums[i],找到当nums[i]是好子数组最小值时的最大区间。
即找到左边和右边离i最近的比它小的元素,就是边界,从而确定以nums[i]为最小值的子数组的范围
时间复杂度O(n^2)

for i in range(n):# 找左边离i最近的比它小的元素j = iwhile j>=0 and nums[j]>=nums[i]:j -= 1l = j# 找右边离i最近的比它小的元素j = iwhile j<n and nums[j]>=nums[i]:j += 1r = jif l<k and r>k:res = (r-l-1)*nums[i]ans = max(ans,res)

正确解法

想一下暴力解法2有什么可以优化的地方呢?
其实在求左边(右边)离i最近的比它小的元素这个地方是O(n)的,其实可以用单调栈将这个操作优化成O(1)的。

为了解决这个问题,我们可以采用单调栈的方法来找到每个元素左边和右边第一个比它小的元素的位置。这是因为对于任意的元素nums[i],我们想要知道在其左边和右边第一个比它小的元素,从而确定以nums[i]为最小值的子数组的范围
核心思路:枚举每一个Nums[i]作为最小值的好子数组的最大分数。

时间复杂度O(n)

AC 代码

class Solution:def maximumScore(self, nums: List[int], k: int) -> int:n = len(nums)# 单调栈,找到i左边/右边离他最近的比它小的数# l[i]表示nums[i]左边第一个比它小的元素的下标 l = [-1]*n# r[i]表示nums[i]右边第一个比它小的元素的下标  r = [n]*n# 使用单调栈计算l数组stk = []for i in range(n):while len(stk) and nums[stk[-1]] >= nums[i]:stk.pop()l[i] = stk[-1] if len(stk) else -1stk.append(i)stk = []for i in range(n-1,-1,-1):while len(stk) and nums[stk[-1]] >= nums[i]:stk.pop()r[i] = stk[-1] if len(stk) else nstk.append(i)ans = 0for i in range(n):if l[i]<k and r[i]>k:res = (r[i]-l[i]-1)*nums[i]ans = max(ans,res)return ans
http://www.yayakq.cn/news/595951/

相关文章:

  • 咋建网站免费网站建设ppt模板
  • 做盗版音乐网站到哪里找人做网站
  • 邯郸做移动网站的公司文章修改网站
  • 做网站用什么软件?关于计算机网站开发的论文题目
  • 关于小学网站建设的论文安徽省建设厅官方网站进不去
  • 个人业务网站免费制作站长统计幸福宝下载
  • 房地产网站推荐网站开发部署到国外
  • 网站建设最新模板怀化找什么人做网站
  • 贵阳哪里做网站军事内参消息
  • 网站分析实例WordPress密码如何修改
  • 一级a做爰片不卡免费网站古色古香 网站模板
  • 免费做cpa单页网站网站开发 前端
  • 小白怎样建设公司网站网页设计与制作教程用户注册
  • 中国外贸网站排名做便民网站都需要提供什么
  • 怎么看网站用的什么cms小程序接入wordpress
  • 网站左侧导航栏设计邢台做网站推广的公司
  • 网站 开发 文档哈尔滨酒店网站建设
  • flash做网站步骤上饶做网站哪家好
  • 南宁 网站设计重庆知名网站
  • 永春县住房和城乡规划建设局网站网站推广效果的评价指标有
  • 网站源代码查看百度网址大全 旧版本
  • 互联网 网站建设wordpress 修改浏览量
  • 下了网站建设用阿里云服务器搭建wordpress
  • 网站开发前端技术wordpress 传到哪里去
  • 外贸产品网站建设电商运营多少钱一个月
  • 各类网站建设用ps如何做网站首页
  • 博尔塔拉州大型网站建设网站制作时
  • 长沙网站建设好处h5页面用什么软件
  • 泉州大型网站设计公司公司建设网站能提升什么竞争力
  • 万网 网站模板软件排名工具