每日一题-力扣-2829. k-avoiding 数组的最小总和

news/2025/3/30 10:50:14/

在这里插入图片描述

解决"k-avoiding 数组的最小总和"问题

这道题有两种主要解法。

解法一:直接数学计算(最优解)

通过数学推导直接计算出结果,不需要构建实际的数组。

python">class Solution:def minimumSum(self, n: int, k: int) -> int:# 特殊情况:当k很大或k=1时,可以直接选择前n个正整数if k > 2*n or k <= 1:return n * (n + 1) // 2half_k = k // 2chosen_count = min(n, half_k)# 计算前half_k个数的和first_sum = chosen_count * (chosen_count + 1) // 2# 如果已经选择了n个数,直接返回结果if chosen_count == n:return first_sum# 否则,计算从k开始的剩余数字的和remaining_count = n - chosen_countstart = kend = k + remaining_count - 1remaining_sum = (start + end) * remaining_count // 2return first_sum + remaining_sum

思路解析:

  1. 需要找到n个不同的正整数,使得没有两个数的和等于k,且总和最小。
  2. 为了最小化总和,总是尝试包含尽可能小的正整数。
  3. 对于任何一个数x,不能同时包含x和k-x(否则它们的和就是k)。
  4. 当x < k/2时,x < k-x,所以为了最小化总和,应该选择x而不是k-x。
  5. 因此,可以安全地包含1到k/2的所有数。
  6. 对于k/2 < x < k的数,它们的互补数k-x已经在选择的集合中(因为k-x < k/2),所以必须跳过这些数。
  7. 对于x ≥ k的数,它们的互补数k-x ≤ 0,不在正整数集合中,所以可以安全包含。

时间复杂度:O(1),只需要进行简单的数学计算。
空间复杂度:O(1),只使用常数空间。

解法二:贪心方法 + 集合

通过维护一个集合,贪心地选择最小的可行数字:

python">class Solution:def minimumSum(self, n: int, k: int) -> int:s = set()num = 1while len(s) < n:if k - num not in s:s.add(num)num += 1return sum(s)

思路解析:

  1. 维护一个已选择数字的集合s。
  2. 从1开始,尝试将每个数字加入序列。
  3. 对于每个数字num,检查其互补数(k-num)是否已在集合中。如果不在,则可以加入num。
  4. 继续此过程直到集合中有n个数字。

时间复杂度:O(n),最多需要检查2n个数字。
空间复杂度:O(n),需要存储n个数字。

示例分析

以示例1为例,n=5, k=4:

  • 解法一中,half_k = 2,首先选择1和2。
  • 然后跳过3(因为4-3=1,而1已经在集合中)。
  • 然后从4开始选择剩余的数字:4,5,6。
  • 最终序列是[1,2,4,5,6],总和为18。

两种解法都能得到正确结果,但第一种解法更高效,时间复杂度为常数级。


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

相关文章

车载以太网网络测试 -24【SOME/IP概述】

1 摘要 本文主要介绍SOME/IP的背景以及在车载行业的发展和应用&#xff0c;并对SOME/IP的概念定义、协议栈位置、SOA简述以及行业标准做了介绍。为后续详细介绍SOME/IP做个铺垫。 2 车载SOME/IP 概述 SOME/IP**&#xff08;Scalable Service-Oriented Middleware over IP&am…

阿里巴巴达摩院人工智能训练师(高级)

阿里巴巴达摩院人工智能训练师&#xff08;高级&#xff09; 阿里颁发的证书&#xff0c;找“橙点同学” 一共有五个视频课程&#xff0c;全部上完后即可参加考试&#xff5e; 考试一共34题&#xff0c;可以考两次&#xff0c;第一次不过的话没关系&#xff0c;可以看题析之后…

寻找力量

喜马拉雅-国内专业音频分享平台,随时随地,听我想听&#xff01; 生活总是让你遍体鳞伤&#xff0c;但是后来才发现那些曾经让你受伤的东西&#xff0c;最后都会让你变得强大。 大家好&#xff0c;我是孟豪&#xff0c;今天这首新歌你的答案是由歌手阿荣所唱。 在这首歌里他希望…

ref vs reactive,watch vs watchEffect的区别与使用场景

一、ref 与 reactive 的核心区别 使用场景 ref:处理基本数据类型&#xff1b;需要重新赋值对象&#xff08;如从api获取新数据&#xff09; reactive&#xff1a;处理复杂的嵌套对象或者数组&#xff0c;不需要整体替换&#xff0c;直接访问属性&#xff08;避免频繁写.value&…

孟德尔随机化:脑卒中研究新钥匙

孟德尔随机化&#xff1a;脑卒中研究新钥匙 孟德尔随机化&#xff0c;作为一种基于遗传变异的因果推断方法&#xff0c;正逐渐成为医学研究领域的有力工具&#xff0c;在脑卒中研究中发挥着关键作用 。它的基本原理源于孟德尔遗传定律&#xff0c;即个体在受精过程中&#xff0…

c#的.Net Framework 的console 项目找不到System.Window.Forms 引用

首先确保是建立的.Net Framework 的console 项目,然后天健reference 应用找不到System.Windows.Forms 引用 打开对应的csproj 文件 在第一个PropertyGroup下添加 <UseWindowsForms>true</UseWindowsForms> 然后在第一个ItemGroup 下添加 <Reference Incl…

Open CASCADE学习|基于AIS_PointCloud显示点集

定义与用途 AIS_PointCloud是OpenCASCADE中用于表示和管理点云数据的类&#xff0c;能够高效地绘制大量任意彩色点集。它通过Graphic3d_ArrayOfPoints将点数据传递给OpenGL图形驱动程序&#xff0c;以将设定点绘制为“点精灵”数组&#xff0c;且点数据被打包到顶点缓冲区对象…

数据文件误删除,OceanBase中如何重建受影响的节点

当不慎误删数据文件且当前没有现成的可替换节点时&#xff0c;在OceanBase中&#xff0c;不必急于采取极端措施&#xff0c;可以考虑运用 server_permanent_offline_time 参数&#xff0c;来重建受影响的节点。 原理&#xff1a; server_permanent_offline_time 是 OceanBase数…