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)。

相关推荐
帅中的小灰灰18 分钟前
C++编程建造器设计模式
java·c++·设计模式
做怪小疯子25 分钟前
LeetCode 热题 100——链表——相交链表
算法·leetcode·链表
while(努力):进步1 小时前
5G与物联网:连接万物的数字化未来
leetcode
喵个咪1 小时前
Qt 6 实战:C++ 调用 QML 回调方法(异步场景完整实现)
前端·c++·qt
立志成为大牛的小牛2 小时前
数据结构——五十一、散列表的基本概念(王道408)
开发语言·数据结构·学习·程序人生·算法·散列表
2501_941804323 小时前
C++在高性能互联网服务开发与系统优化中的应用与实战经验解析
leetcode
希望有朝一日能如愿以偿4 小时前
力扣每日一题:可被三整除的最大和
数据结构·算法·leetcode
阿波茨的鹅4 小时前
VSCode C++ 项目配置教程
c++·ide·vscode
程序员与背包客_CoderZ4 小时前
C/C++版LLM推理框架Llama.cpp——入门与编码实战
c语言·开发语言·网络·c++·人工智能·语言模型·llama
浪子不回头4155 小时前
经典数据结构-哈希链表-LRU
数据结构·链表·哈希算法