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

成都企业建设网站电话网站模板怎么改

成都企业建设网站电话,网站模板怎么改,wordpress特别卡,优斗士网站建设文章目录 基础1046.最后一块石头的重量3264.K次乘运算后的最终数组I选出和最大的K个元素2406.将区间分为最少组数 重排元素[模版题] 767.重构字符串1054.距离相等的条形码 第K大/小元素反悔堆LCP.30魔塔游戏 堆的好处,每次弹出和装入堆,时间复杂度都是 l…

文章目录

  • 基础
    • 1046.最后一块石头的重量
    • 3264.K次乘运算后的最终数组I
    • 选出和最大的K个元素
    • 2406.将区间分为最少组数
  • 重排元素
    • [模版题] 767.重构字符串
    • 1054.距离相等的条形码
  • 第K大/小元素
  • 反悔堆
    • LCP.30魔塔游戏

  • 堆的好处,每次弹出和装入堆,时间复杂度都是 logn
  • 支持多个优先级排序,只要你的元素是元组,那么第一个优先级就是 第一个元素,第二个优先级就是 第二个元素,以此类推
  • 堆:分为小堆和大堆,但是python中只有小堆的用法,也就是heapq只能支持小堆,如果想用大堆,将元素全部取反即可
  • 基本操作:
import heapq
# 默认是小堆
hea = []
# 弹出并返回堆中的最小值,如果堆为空,则不允许弹出
heapq.heappop(hea)
# 往堆中加入元素,并维护为小堆
num = 1
heapq.heappush(hea,num)
# 这里比价好玩的是,判断堆是否为空,其实我们只用判断len(hea)是否等于0

基础

1046.最后一块石头的重量

1046.最后一块石头的重量

在这里插入图片描述

  • 使用的是大堆,所以要把元素取反
import heapq
class Solution:def lastStoneWeight(self, stones: List[int]) -> int:# 经典的堆的问题# 但是这个是小根堆,得转化为负数才行hea = []for i in stones:heapq.heappush(hea,-i)while len(hea) > 1:y = -heapq.heappop(hea)x = -heapq.heappop(hea)if x == y :continueelse:heappush(hea,x-y)print(len(hea))if len(hea) == 0:return 0else:return -heappop(hea)

3264.K次乘运算后的最终数组I

3264.K次乘运算后的最终数组I

在这里插入图片描述

  • 入堆的元素,(nums[i],i),也就是要记录这个下标
import heapq
class Solution:def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]:# 找最小值的类型# 并且还是有顺序的n = len(nums)hea = []for i in range(n):heapq.heappush(hea,(nums[i],i))for j in range(k):num,i = heapq.heappop(hea)num *= multipliernums[i] = numheapq.heappush(hea,(num,i))return nums

选出和最大的K个元素

选出和最大的K个元素

在这里插入图片描述

在这里插入图片描述

  • 观察时间复杂度,发现这个如果是直接暴力的话,时间复杂度是 o ( n 2 ) o(n^2) o(n2),肯定是超标的,但是如果排序的话,就会破坏掉原本的一个对应的关系,所以考虑绑在一起,然后使用堆来维护空间为k的一个和值
import heapq
class Solution:def findMaxSum(self, nums1: List[int], nums2: List[int], k: int) -> List[int]:# 有几个关键点,一个就是得保留先前的下标,还有就是得匹配nums1 和 nums2 ,然后按照nums1进行排序n = len(nums1)# 时间消耗在这里 nlognnewnums = sorted(zip(nums1,nums2,list(range(n))),key = lambda x:x[0])ans = [0]*n# 这样后面可以直接替换hea = [0]*k# 现在的任务应该是首先处理一下,就是与当前的元素相同的话,就要先处理l = 0# 使用一个变量记录当前的堆的和s = 0while l < n:# 处理完一个元素,然后向后面查找相同的元素,然后再一起加入堆ans[newnums[l][2]] = sr = l+1if r >= n:break# 处理元素相同的情况while r < n and newnums[r][0] == newnums[l][0]:ans[newnums[r][2]] = ans[newnums[l][2]]r+=1# 需要往这个hea里面加入 r - l 个元素if r >= n:breakfor j in range(l,r):# 每一次操作就是 logk的时间复杂度tmp = heapq.heappop(hea)s -= tmpif tmp < newnums[j][1]:heapq.heappush(hea,newnums[j][1])s += newnums[j][1]else:heapq.heappush(hea,tmp)s += tmpl = rreturn ans

2406.将区间分为最少组数

2406.将区间分为最少组数

在这里插入图片描述

  • 可以看到这个分组的顺序与现在的排列是无关的,所以我们考虑首先按照区间的左端点进行升序排序
  • 考虑实际的分组的模拟操作,我们发现需要找到当前所有分组当中,右端点最小的区间,如果当前的left<这个最小的right,那么我们就需要重新开一个新的组,如果left>这个最小的right,那么我们就可以更新这个right,考虑使用维护
import heapq
class Solution:def minGroups(self, intervals: List[List[int]]) -> int:# 可以看到这个划分与实际的挑选的顺序无关,所以我们可以进行先排序处理intervals.sort(key = lambda x :x[0])# 接下来就要进行遍历,找到一种数据结构,可以找到最小值并且还能更新的# 那就考虑使用最小堆hea = []for left,right in intervals:if hea and left > hea[0]:heapq.heappop(hea)heapq.heappush(hea,right)else:heapq.heappush(hea,right)return len(hea)

重排元素

[模版题] 767.重构字符串

767.重构字符串

在这里插入图片描述

灵神讲解

  • 总的来说直接参透这个模版即可,模版的功能:就是可以用于构造相邻的元素不同的序列
class Solution:def reorganizeString(self, s: str) -> str:# 如果长度是奇数,那么相同的数量不能超过 n//2 + 1n = len(s)a = Counter(s).most_common()m = a[0][1]if m > n - m +1:return ""ans = ['']*ni = 0for ch,cnt in a:for _ in range(cnt):ans[i] = chi += 2if i >=n:i = 1 # 从奇数下标开始填return ''.join(ans)

1054.距离相等的条形码

1054.距离相等的条形码

在这里插入图片描述

  • 模版题目,减少了可行性的判断
class Solution:def rearrangeBarcodes(self, barcodes: List[int]) -> List[int]:n = len(barcodes)ans = [0]*na = Counter(barcodes).most_common()i = 0for num ,cnt in a:for _ in range(cnt):ans[i] = numi+=2if i >= n:# 从奇数开始i = 1return ans

第K大/小元素

反悔堆

LCP.30魔塔游戏

LCP.30魔塔游戏

在这里插入图片描述
在这里插入图片描述

import heapq
class Solution:def magicTower(self, nums: List[int]) -> int:# 首先判断能否去?其实就统计总和是否》=0即可。# 在可以到达的时候,最多调整次数为负数的次数if not sum(nums)>=0:return -1# 可以到达# 其实可以统计一个数的左边最小的负数,包含当前的数n = len(nums)cur = 1hp = []ans = 0# 使用小根堆进行存储当前的负数的情况for i in range(n):# 负数的话就加入if nums[i] < 0:heapq.heappush(hp,nums[i])# 无论正负,都加入curcur+=nums[i]# 如果栈中还有元素,并且当前没有血量,就弹出反悔最小的负数while hp and cur <= 0:p = heapq.heappop(hp)ans+=1cur+=abs(p)return ans
http://www.dtcms.com/wzjs/782688.html

相关文章:

  • 推广策略英文上海网站建设seo推广
  • 建设企业网站需要多少钱阿里云有了域名 网站建设
  • 网站的后台管理员系统建设教程湖北企业网站建设
  • 网站点击率原因免费seo网站自动推广
  • 南昌手机模板建站建网站个人主机做服务器
  • 网站seo优化多少钱使用微信做网站第三方登录
  • wordpress个人博客建站系统在线图片编辑器精简版
  • 特色专业建设验收网站荣成市信用建设官方网站
  • 做网站没有活西安做网站
  • 永兴集团网站汕头做网站公司哪家好
  • 跨境电商网站系统开发自适应营销网站
  • 苏州市相城区住房和城乡建设局网站主题资源网站建设作业
  • 没备案网站如何通过百度联盟审核网站域名怎么取
  • 书画院网站建设方案东莞地铁线路图
  • 门户网站模板西安做网站公
  • 什么是网站地址郑州网站制作怎么样
  • 如何为网站做优化万能模板
  • 寿光住房和城乡建设局网站一级域名和二级域名做两个网站
  • 时代汇创网站建设公司手机wordpress怎么注册
  • 昆明网站制作服务商黄骅旅游景点大全
  • 优质院校建设网站软件平台化
  • 什么网站做简历最好一个主做海贼王的网站
  • 松江网站开发工作号做文案素材的网站
  • 网站建设软件 优帮云h5做网站教程
  • win7 iis架设网站wordpress 空间需求php哪个版本
  • 福州外文网站建设wordpress图片后加载很慢
  • 建个大型网站需工信部网站备案系统怎么注册
  • 旅游网站模块分类外链相册
  • 自己做个网站的流程ps做图下载网站
  • 怎样让百度收录网站网站推广方案中