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

相关推荐
SNAKEpc1213823 分钟前
OpenGL(十一)- 变换管线
c语言·c++·算法·矩阵·图形渲染
牢姐与蒯44 分钟前
c++高级数据结构之图(基本概念,存储结构,BFS,DFS,最小生成树)
数据结构·c++·
c238561 小时前
MySQL 基础用法(下):查询进阶与核心特性
android·c语言·c++·mysql
码匠许师傅2 小时前
【C++ 面试真题】 C++ 中的 static 有什么作用?
c++·面试
郭涤生2 小时前
C++ 零拷贝(Zero-Copy)
linux·开发语言·c++
乐观勇敢坚强的老彭2 小时前
计算机内存中的堆和栈
c++
@Mike@2 小时前
07-数据库学习笔记(数据库哈希表)
数据库·哈希算法·散列表
间歇性努力持续性发呆的野生快乐选手3 小时前
dfs回溯,bfs枚举,完全背包
c++·算法·深度优先·宽度优先
码工许师傅4 小时前
一文读懂《Effective C++ 第三版》的55条黄金法则
c++
ao-weilai4 小时前
C++基础:C++11部分内容
开发语言·c++·c++11