【每日一题】K 个元素的最大和

文章目录

  • Tag
  • 题目来源
  • 解题思路
    • 方法一:贪心
  • 其他语言
    • C
    • python3
  • 写在最后

Tag

【贪心】【脑筋急转弯】【数组】【2023-11-15】


题目来源

2656. K 个元素的最大和


解题思路

方法一:贪心

从第一次操作开始每次选择数组中的最大值,由于最大值在加一后仍为数组中的最大值,所以若初始数组中的最大值为 m,则 k 次操作后我们能获得的分数为:

m + ( m + 1 ) + . . . + ( m + k − 1 ) = ( 2 ∗ m + k − 1 ) ∗ k 2 m + (m + 1) + ... + (m + k - 1) = \frac{(2 * m + k - 1) * k}{2} m+(m+1)+...+(m+k1)=2(2m+k1)k

需要注意的是计算机中的 / 是整除,没有数学上的除法,需要考虑一上式结果为奇数还是偶数,现在分情况讨论一下:

  • k 为偶数,则 k - 1 为奇数,奇数加偶数为奇数,所以 2 * m + k - 1 为奇数,奇数乘以偶数得到偶数,所以此时的结果为偶数;
  • k 为奇数,则 k - 1 为偶数,偶数加偶数为偶数,所以 2 * m + k - 1 为奇数,奇数乘以偶数得到偶数,所以此时的结果为偶数。

综上,不论 k 是奇数还是偶数,最后的结果都是偶数,因此可以放心使用 /,最后返回 (2 * m + k - 1) * k / 2

其实对于这种等差数列求和,只要数列中的数都是整数,求和就不会得到小数,因此上述的判断奇偶数可以省略。

实现代码

class Solution {
public:int maximizeSum(vector<int>& nums, int k) {int m = *max_element(nums.begin(), nums.end());return (2 * m + k - 1) * k / 2;}
};

复杂度分析

时间复杂度: O ( 1 ) O(1) O(1)

空间复杂度: O ( 1 ) O(1) O(1)

其他语言

C

int maximizeSum(int* nums, int numsSize, int k) {int m = 0;for (int i = 0; i < numsSize; i++) {m = fmax(m, nums[i]);}return (2 * m + k - 1) * k / 2; 
}

fmax 是 C 标准库中的一个函数,主要用于比较两个浮点数的大小,返回两者中的较大值。在函数原型中,fmax 接受两个 double 类型的参数。但是似乎也可以取出两个 int 类型元素的最大值。其实是将两个int类型数据传递给 fmax 时,被 fmax 加上小数点和 0 强转成浮点类型了,最后的输出浮点类型又被传给 int 类型,浮点类型被截断去掉小数点和 0,并不影响结果。所以以后在 c 语言中可以使用 fmax 来获得两个 int 类型数据的最大值,不要忘记头文件 #include<maxth.h>

python3

class Solution:def maximizeSum(self, nums: List[int], k: int) -> int:return (2 * max(nums) + k - 1) * k // 2

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/175023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法萌新闯力扣:同构字符串

力扣题&#xff1a;同构字符串 开篇 对于字符串相关的题目&#xff0c;哈希表经常会使用到&#xff0c;这道题更是如此&#xff0c;还用到了两个哈希表。拿下它&#xff0c;你对字符串题目的理解就会更上一层楼。 题目链接:205.同构字符串 题目描述 代码思路 看完题目后&a…

爬虫----robots.txt 协议简介

文章目录 robots.txt 是一个用于指示网络爬虫(web spider或web robot)如何与网站上的内容进行交互的协议。这个文件被网站管理员放置在网站的根目录下,用于告知爬虫哪些部分的网站是可以被抓取的,哪些是不被允许的。以下是 robots.txt 协议的一些关键要点: 控制爬虫访问:…

〖大前端 - 基础入门三大核心之JS篇㉟〗- JavaScript 的DOM简介

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

1688往微信小程序自营商城铺货商品采集API接口

一、背景介绍 随着移动互联网的快速发展&#xff0c;微信小程序作为一种新型的电商形态&#xff0c;正逐渐成为广大商家拓展销售渠道、提升品牌影响力的重要平台。然而&#xff0c;对于许多传统企业而言&#xff0c;如何将商品信息快速、准确地铺货到微信小程序自营商城是一个…

【运维 监控】Grafana + Prometheus,监控Linux

安装和配置Grafana与Prometheus需要一些步骤&#xff0c;下面是一个简单的指南&#xff1a; 安装 Prometheus&#xff1a; 使用包管理器安装 Prometheus。在 Debian/Ubuntu 上&#xff0c;可以使用以下命令&#xff1a; sudo apt-get update sudo apt-get install prometheus在…

C/C++计算乘积 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C计算乘积 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C计算乘积 2021年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定两个数a,b&#xff0c;计算它们的乘积 2、输入输出…

TCP为什么需要三次握手和四次挥手?

面试官&#xff1a;说说TCP为什么需要三次握手和四次挥手&#xff1f; 一、三次握手 三次握手&#xff08;Three-way Handshake&#xff09;其实就是指建立一个TCP连接时&#xff0c;需要客户端和服务器总共发送3个包 主要作用就是为了确认双方的接收能力和发送能力是否正常、…

编程怎么学习视频教程,编程实例入门教程,中文编程开发语言工具下载

编程怎么学习视频教程&#xff0c;编程实例入门教程&#xff0c;中文编程开发语言工具下载。 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件…

STM32中独立看门狗和窗口看门狗的使用方法

独立看门狗&#xff08;Independent Watchdog&#xff0c;IWDG&#xff09;和窗口看门狗&#xff08;Window Watchdog&#xff0c;WWDG&#xff09;是STM32微控制器中提供的两种看门狗定时器。看门狗定时器是一种硬件计时器&#xff0c;用于监视系统的运行状态&#xff0c;并在…

Docker Desktop 开启失败 Unexcept WSL Error

Docker Desktop 开启失败 Unexcept WSL Error 原因 原因 安装了安卓模拟器&#xff0c;然后导致 WSL 起不来&#xff0c;尝试如下都没用 重置代理 —— netsh winsock resetBIOS 关闭、重启、再重新打开 CPU 虚拟化关闭 hyper-v、windows subsystem for linux 再重启 再开启卸…

Python+Qt多点最短路径(最优路径)算法实现

程序示例精选 PythonQt多点最短路径(最优路径)算法实现 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonQt多点最短路径(最优路径)算法实现》编写代码&#xff0c;代码整洁&#xff0…

JVM实战-JVM之类加载时机

目录 JVM实战-JVM之类加载时机1 主动引用2 被动引用 JVM实战-JVM之类加载时机 Java虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这个过程被称作虚拟机的类加载机…