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

相关推荐
PAK向日葵1 小时前
【C++】整数类型(Integer Types)避雷指南与正确使用姿势
c++·安全·面试
ShineWinsu6 小时前
对于C++:继承的解析—上
开发语言·数据结构·c++·算法·面试·笔试·继承
左手厨刀右手茼蒿7 小时前
Flutter for OpenHarmony: Flutter 三方库 hashlib 为鸿蒙应用提供军用级加密哈希算法支持(安全数据完整性卫士)
安全·flutter·华为·c#·哈希算法·linq·harmonyos
消失的旧时光-19437 小时前
C++ 多线程与并发系统取向(二)—— 资源保护:std::mutex 与 RAII(类比 Java synchronized)
java·开发语言·c++·并发
Wishell20158 小时前
数学中的卷积
数学
iAkuya8 小时前
(leetcode)力扣100 76数据流的中位数(堆)
算法·leetcode·职场和发展
抓饼先生8 小时前
iceoryx编译和验证
linux·c++·零拷贝·iceoryx
王老师青少年编程9 小时前
2020年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第2题)
c++·题解·真题·初赛·信奥赛·csp-s·提高组
你的冰西瓜9 小时前
C++ STL算法——排序和相关操作
开发语言·c++·算法·stl
今儿敲了吗10 小时前
29| 高考志愿
c++·笔记·学习·算法