LeetCode 2656. K 个元素的最大和:一次遍历(附Python一行版代码)

news/2024/12/30 2:20:25/

【LetMeFly】2656.K 个元素的最大和:一次遍历(附Python一行版代码)

力扣题目链接:https://leetcode.cn/problems/maximum-sum-with-exactly-k-elements/

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你需要执行以下操作 恰好 k 次,最大化你的得分:

  1. nums 中选择一个元素 m 。
  2. 将选中的元素 m 从数组中删除。
  3. 将新元素 m + 1 添加到数组中。
  4. 你的得分增加 m 。

请你返回执行以上操作恰好 k 次后的最大得分。

 

示例 1:

输入:nums = [1,2,3,4,5], k = 3
输出:18
解释:我们需要从 nums 中恰好选择 3 个元素并最大化得分。
第一次选择 5 。和为 5 ,nums = [1,2,3,4,6] 。
第二次选择 6 。和为 6 ,nums = [1,2,3,4,7] 。
第三次选择 7 。和为 5 + 6 + 7 = 18 ,nums = [1,2,3,4,8] 。
所以我们返回 18 。
18 是可以得到的最大答案。

示例 2:

输入:nums = [5,5,5], k = 2
输出:11
解释:我们需要从 nums 中恰好选择 2 个元素并最大化得分。
第一次选择 5 。和为 5 ,nums = [5,5,6] 。
第二次选择 6 。和为 6 ,nums = [5,5,7] 。
所以我们返回 11 。
11 是可以得到的最大答案。

 

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100
  • 1 <= k <= 100

方法一:一次遍历

  1. 想要使和最大,每次操作肯定选最大值
  2. 每次操作后最大值都会更大

因此,我们只需要遍历一遍数组找到数组中元素的最大值,假设为 M M M,则返回等差数列 M , M + 1 , M + 2 , ⋯ , M + k − 1 M, M + 1, M + 2, \cdots, M + k - 1 M,M+1,M+2,,M+k1(共 k k k项)之和 k M + ( M + k − 1 ) 2 k\frac{M + (M + k - 1)}{2} k2M+(M+k1)即为答案。

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
class Solution {
public:int maximizeSum(vector<int>& nums, int k) {int M = nums[0];for (int t : nums) {M = max(M, t);}return k * (M + M + k - 1) / 2;}
};
Python
# from typing import Listclass Solution:def maximizeSum(self, nums: List[int], k: int) -> int:return k * (max(nums) * 2 + k - 1) // 2

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/134429024


http://www.ppmy.cn/news/1219594.html

相关文章

csrf总结

csrf注入总结 漏洞描述 CSRF&#xff08;跨站请求伪造&#xff09;是一种网络安全漏洞&#xff0c;攻击者利用该漏洞在用户不知情的情况下以用户的身份发送恶意请求&#xff0c;从而导致用户执行未经授权的操作。 CSRF&#xff08;Cross Site Request Forgery, 跨站域请求伪…

outlook群发邮件

一米群发软件使用Outlook进行群发邮件的步骤如下&#xff1a; 打开Outlook软件&#xff0c;点击页面上方的“新建电子邮件”选项。在弹出的新邮件中&#xff0c;输入收件人和邮件主题&#xff0c;在收件人输入框中输入多个需要接收邮件的邮箱地址&#xff0c;用分号&#xff0…

微信小程序广告banner、滚动屏怎么做?

使用滑块视图容器swiper和swiper-item可以制作滚动屏&#xff0c;代码如下&#xff1a; wxml: <swiper indicator-dots indicator-color"rgba(255,255,255,0.5)" indicator-active-color"white" autoplay interval"3000"><swiper-ite…

2023NOIP A层联测32 红楼 ~ Eastern Dream

题目大意 给定一个长度为 n n n的序列 a a a&#xff0c;有 m m m次操作&#xff0c;每次操作有两种类型&#xff1a; 1 x y k&#xff0c;对于所有满足 ( i − 1 ) m o d x ≤ y (i-1)\bmod x\leq y (i−1)modx≤y的 i i i&#xff0c;将 a i a_i ai​的值加上 k k k2 l r&a…

Go语言函数底层实现

基于堆栈模式的程序执行模型决定了函数是语言的一个核心元素。分析Go函数的内部实现&#xff0c;对理解整个程序的执行模型有很大好处。研究底层实现有两个方法一种是看语言编译器源码&#xff0c;分析其对函数的各个特性的处理逻辑&#xff0c;一种是反汇编&#xff0c;将可以…

2.4 Windows驱动开发:内核字符串拷贝与比较

在上一篇文章《内核字符串转换方法》中简单介绍了内核是如何使用字符串以及字符串之间的转换方法&#xff0c;本章将继续探索字符串的拷贝与比较&#xff0c;与应用层不同内核字符串拷贝与比较也需要使用内核专用的API函数&#xff0c;字符串的拷贝往往伴随有内核内存分配&…

交换机基础知识之安全配置

交换机在网络基础设施中扮演着重要角色&#xff0c;它促进了设备之间数据包的流动。正因此&#xff0c;采取适当的安全措施来保护网络免受未经授权的访问和潜在攻击至关重要。本文将全面解读交换机基础安全配置知识&#xff0c;并提供实践方案&#xff0c;以保证安全的网络环境…

MessageFormat:格式化字符串

需求 有一个字符串&#xff1a;"[张三]负责的位置[东厂房]发生[烟雾]报警&#xff0c;请[张三]及时前往处理。"。实际需要对[]内的内容进行替换。如果调用String.replace()&#xff0c;那需要执行多次。而使用MessageFormat.format&#xff0c;则可以替换一次即可获…