首页 > 编程语言 >力扣每日一题+python知识点回顾

力扣每日一题+python知识点回顾

时间:2023-10-18 22:34:38浏览次数:32  
标签:知识点 heapq 10 python nums 示例 力扣 enumerate print

力扣题目:执行 K 次操作后的最大分数(题号:2530)

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你的 起始分数 为 0 。

在一步 操作 中:

  1. 选出一个满足 0 <= i < nums.length 的下标 i ,
  2. 将你的 分数 增加 nums[i] ,并且
  3. 将 nums[i] 替换为 ceil(nums[i] / 3) 。
  4. 返回在 恰好 执行 k 次操作后,你可能获得的最大分数。

向上取整函数 ceil(val) 的结果是大于或等于 val 的最小整数。

示例 1:

输入:nums = [10,10,10,10,10], k = 5
输出:50
解释:对数组中每个元素执行一次操作。最后分数是 10 + 10 + 10 + 10 + 10 = 50 。

示例 2:

输入:nums = [1,10,3,3,3], k = 3
输出:17
解释:可以执行下述操作:
第 1 步操作:选中 i = 1 ,nums 变为 [1,4,3,3,3] 。分数增加 10 。
第 2 步操作:选中 i = 1 ,nums 变为 [1,2,3,3,3] 。分数增加 4 。
第 3 步操作:选中 i = 2 ,nums 变为 [1,1,1,3,3] 。分数增加 3 。
最后分数是 10 + 4 + 3 = 17 。

编程思路:贪婪算法+大根堆调整

注意:python中没有自带的大根堆只有小根堆,所以需要使用负号取反,再在加上结果时取反。

python小根堆:

小根堆模块:heapq
函数:
1.heapq.heapify(x):创建堆,将list x 转换称堆,时间复杂度线性,空间复杂度原地。
示例:

import heapq
H = [21,1,45,78,3,5]  #Use heapify to rearrange the elements  
heapq.heapify(H)  
print(H)  

结果:

[1, 3, 5, 78, 21, 45]

2.heapq.heappush(heap, item):将item的值加入heap中,保持堆的不变性。
示例:

heapq.heappush(H,8)  
print(H)  

结果:

[1, 3, 5, 78, 21, 45, 8]

3.heapq.heappop(heap):弹出并返回 heap 的最小的元素,保持堆的不变性。如果堆为空,抛出 IndexError 。使用 heap[0] ,可以只访问最小的元素而不弹出它。
示例:

heapq.heappop(H)
print(H)

结果(相比初始堆栈)

[3, 21, 5, 78, 45]

4.heapq.heapreplace(x):总是删除堆中最小的元素,并在未被任何顺序修复的地方插入新的传入元素
示例:

heapq.heapreplace(H,6)
print(H)

结果(相比初始堆栈)

[3, 6, 5, 78, 21, 45]

5.heapq.heappushpop(heap, item):将 item 放入堆中,然后弹出并返回 heap 的最小元素。该组合操作比先调用 heappush() 再调用 heappop() 运行起来更有效率。

enumerate函数

enumerate(sequence, [start=0])
用于将一个可遍历的数据对象(如列表,元组或者字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
参数:

sequence -- 一个序列、迭代器或其他支持迭代对象。
start -- 下标起始返回值

示例:

nums = [5,7,9]
for t in enumerate(nums):
    print(t)
for index,num in enumerate(nums):
    print(index,num)
print(list(enumerate(nums)))
print(tuple(enumerate(nums)))

结果

(0, 5)
(1, 7)
(2, 9)
0 5
1 7
2 9
[(0, 5), (1, 7), (2, 9)]
((0, 5), (1, 7), (2, 9))

贪婪算法

要使得分数最大化,我们需要在每一步操作中,选择元素值最大的元素进行操作。因此,我们可以使用优先队列(大根堆)来维护当前元素值最大的元素。

先化成小根堆,即先迭代将nums中元素全部取反,创建小根堆,然后每次取出小根堆里最小的数,并将最小的数先取反,再后取ceil值,再取反,再加入到小根堆中,重复k次,将答案返回即可。

编程代码:

解题代码:

class Solution:
    def maxKelements(self, nums: List[int], k: int) -> int:
        for i in range(len(nums)) :
            nums[i] = -nums[i]
        heapify(nums)
        ans = 0
        while k > 0 :
            h = -heappop(nums)
            ans += h
            print(h)
            heappush(nums, -(ceil(h / 3)))
            k -= 1
        return ans

此处for循环处也可采用enumerate函数
进阶代码:

class Solution:
    def maxKelements(self, nums: List[int], k: int) -> int:
        for i, v in enumerate(nums):
            nums[i] = -v
        heapify(nums)
        ans = 0
        while k > 0 :
            h = -heappop(nums)
            ans += h
            print(h)
            heappush(nums, -(ceil(h / 3)))
            k -= 1
        return ans

标签:知识点,heapq,10,python,nums,示例,力扣,enumerate,print
From: https://www.cnblogs.com/LWHD/p/17773540.html

相关文章

  • 笨办法学Python3 习题36 设计与调试
    if语句规则:每一条if语句必须包含一个else如果else永远都不会执行到,就在后面加die函数if语句嵌套不要超过两层,最好保持一层当作段落来对待,每一个ifelifelse组合,前后加空行来区分如果布尔式复杂的化,先将运算赋给变量循环的规则:永不停止的循环用while循环,......
  • 代码训练营第八天(Python)| 344.反转字符串、541. 反转字符串II、05.替换空格、151.翻转
    344.反转字符串双指针法时间复杂度为:O(n),空间复杂度为:O(1)classSolution:defreverseString(self,s:List[str])->None:"""Donotreturnanything,modifysin-placeinstead."""left,right=0,len(s......
  • 基于Python的招聘网站爬虫及可视化的实现-计算机毕业设计源码+LW文档
    摘要随着社会经济的快速发展,人们的生活水平得到了显著提高,但随之而来的社会问题也越来越多。其中最为显著的就是就业问题。为此,招聘信息的展示也变得越来越为重要。但是在大量的招聘信息中,人们在提取自己最想要的信息时变得不那么容易,对于应聘者也是如此。本系统通过对网络爬虫的......
  • Python37days
    进程缩进程之间数据隔离问题如何查看进程的进程号队列(Queue类专业的队列)生产者消费者模型线程理论如何开启线程(Thread)线程类的参数,方法,属性守护线程(守护进程)GIL全局解释器锁————————————————————————————————————————————......
  • Python自激励阈值自回归(SETAR)、ARMA、BDS检验、预测分析太阳黑子时间序列数据
    全文链接:https://tecdat.cn/?p=33896原文出处:拓端数据部落公众号这篇文章展示了自激励阈值自回归SETAR的使用,用于分析经常被客户研究的太阳黑子数据集。具体而言,研究SETAR模型的估计和预测。我们在这里考虑原始的太阳黑子序列以匹配ARMA示例,尽管文献中许多来源在建模之前对序......
  • python-zipfile
    python-zipfile目录python-zipfile常用方法压缩包信息解压文件压缩文件批量压缩参考链接zipfile是python的一个内置模块,专门用于压缩文件和解压文件常用方法ZipFile(filename[,mode[,compression[,allowZip64]]])importzipfilefile_path="D:/test.zip"file_path2="......
  • python-functools
    python-functools目录python-functoolspartial偏函数案例1-普通使用案例2-延迟执行案例3-回调函数添加参数partialmethodreducewrapsupdate_wrappercache(user_function)lru_cache(maxsize)singledispatchsingledispatchmethod参考资料functools模块用于高阶函数:作用与或者返回......
  • 利用 python 抽取pdf 中表格到 excel
    首先推荐camelotpdf_file_input="TTAF086-2021.pdf"tables=camelot.read_pdf(pdf_file_input,pages='11',flavor='stream')df=tables[0].dfdf.to_excel("TTAF086-2021.xlsx",index=False)pdf表格效果如下其......
  • Python基础习题1
    请大家不要上网搜索或在pycharm里试运行,尽量要闭卷做练习,做错的我们统一讲解。 1. 关于 Python的编程环境,下列的哪个表述是正确的?(   )A、Python的编程环境是图形化的;B、 Python只有一种编程环境ipython;C、Python自带的编程环境是IDLE;D、用windows自带的......
  • Linux 下安装 miniconda,管理 Python 多环境
    安装miniconda1、下载安装包Miniconda3-py37_22.11.1-1-Linux-x86_64.sh,或者自行选择版本2、把安装包上传到服务器上,这里放在/home/software3、安装bashMiniconda3-py37_22.11.1-1-Linux-x86_64.sh4、按回车WelcometoMiniconda3py37_22.11.1-1Inordertocontin......