Leetcode2829. k-avoiding 数组的最小总和

Every day a Leetcode

题目来源:2829. k-avoiding 数组的最小总和

解法1:贪心 + 哈希

从 1 开始枚举数 x,如果 k - x 不在哈希表里,说明可以插入 k-avoiding 数组,sum 加上 x,向哈希表插入 x。

当哈希表中有 n 个元素时,退出,返回 sum。

代码:

c 复制代码
/*
 * @lc app=leetcode.cn id=2829 lang=cpp
 *
 * [2829] k-avoiding 数组的最小总和
 */

// @lc code=start

// 贪心 + 哈希

class Solution
{
public:
    int minimumSum(int n, int k)
    {
        unordered_set<int> visited;
        int sum = 0, count = 0;
        for (int x = 1; x <= 2 * n; x++)
        {
            if (!visited.count(k - x))
            {
                sum += x;
                count++;
                if (count == n)
                    break;
                visited.insert(x);
            }
        }
        return sum;
    }
};
// @lc code=end

结果:

复杂度分析:

时间复杂度:O(n)。

空间复杂度:O(n)。

解法2:数学

代码:

c 复制代码
// 数学

class Solution
{
public:
    int minimumSum(int n, int k)
    {
        int m = min(k / 2, n);
        return (m * (m + 1) + (k * 2 + n - m - 1) * (n - m)) / 2;
    }
};

结果:

复杂度分析:

时间复杂度:O(1)。

空间复杂度:O(1)。

相关推荐
CSDN_RTKLIB1 小时前
【字符编码】有无BOM的UTF-8
c++
Chary20162 小时前
opengl 学习资料路径
c++·opengl
im_AMBER2 小时前
Leetcode 102 反转链表
数据结构·c++·学习·算法·leetcode·链表
今儿敲了吗3 小时前
01|多项式输出
c++·笔记·算法
程序员Jared3 小时前
C++11—mutex
c++
朔北之忘 Clancy3 小时前
2025 年 9 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·数学·青少年编程·题解
量子炒饭大师3 小时前
【C++入门】Cyber底码作用域的隔离协议——【C++命名空间】(using namespace std的原理)
开发语言·c++·dubbo
AlenTech3 小时前
200. 岛屿数量 - 力扣(LeetCode)
算法·leetcode·职场和发展
REDcker3 小时前
RTCP 刀尖点跟随技术详解
c++·机器人·操作系统·嵌入式·c·数控·机床
楚Y6同学4 小时前
基于 Haversine 公式实现【经纬度坐标点】球面距离计算(C++/Qt 实现)
开发语言·c++·qt·经纬度距离计算