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

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

【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

相关文章:

  • 【Pytorch和深度学习】栏目导读
  • Oneid方案
  • 《深入浅出.NET框架设计与实现》阅读笔记(四)
  • SOLIDWORKS Flow Simulation阀门内流体仿真
  • 基于乌鸦算法优化概率神经网络PNN的分类预测 - 附代码
  • 软件测试不是所有人都适合的
  • 腾讯云标准型SA4服务器AMD处理器性能测评
  • vue中实现图片懒加载的几种方法
  • 扭矩传感器信号模拟地、数据地与电源地
  • Docker 中的端口
  • 批量重命名软件推荐 A Better Finder Rename 12最新 for mac
  • Mysql开启binlog 和 打开gtid_mode
  • 【蓝桥杯软件赛 零基础备赛20周】第3周——填空题
  • 异步方法、async/await逃离回调地狱(Callback Hell)
  • 四川芸鹰蓬飞商务信息咨询有限公司是可靠的选择
  • C学习-枚举(九)
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • js作用域和this的理解
  • mysql外键的使用
  • nfs客户端进程变D,延伸linux的lock
  • Protobuf3语言指南
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 阿里云购买磁盘后挂载
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 浮动相关
  • 高性能JavaScript阅读简记(三)
  • 机器学习 vs. 深度学习
  • 机器学习学习笔记一
  • 计算机常识 - 收藏集 - 掘金
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何编写一个可升级的智能合约
  • 如何用vue打造一个移动端音乐播放器
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 使用 QuickBI 搭建酷炫可视化分析
  • 学习JavaScript数据结构与算法 — 树
  • 一道闭包题引发的思考
  • 如何用纯 CSS 创作一个货车 loader
  • #每天一道面试题# 什么是MySQL的回表查询
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (力扣)循环队列的实现与详解(C语言)
  • (六)vue-router+UI组件库
  • (三)模仿学习-Action数据的模仿
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Oracle存储过程编写经验和优化措施
  • . NET自动找可写目录
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET NPOI导出Excel详解
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET框架