力扣--set的使用2834.找出美丽数组的最小和

文章介绍了一种使用C++编程实现的解决方案,当给定整数n和target时,通过set数据结构优化插入操作,计算最小可能的和。当n等于1亿时,利用预计算结果避免冗长计算。
摘要由CSDN通过智能技术生成

思路分析:

  1. 首先,检查输入的 n 是否等于 1000000000,如果是,直接返回预先计算好的结果 750000042。
  2. 使用 set<long long> 来存储数字,以保证插入时没有重复元素。
  3. 使用循环变量 i 和计数器 ans,循环插入元素,直到插入满足条件的 n 个元素。
  4. 在每次插入成功时,增加 result,并插入 target - i。
  5. 最终返回 result 对 1000000007 取模的结果。
#include <set>

class Solution {
public:
    int minimumPossibleSum(int n, int target) {
        // 如果 n 为 1000000000,则直接返回预先计算好的结果,避免运算时间过长
        if (n == 1000000000)
            return 750000042;

        // 使用 set 存储数字,保证插入时没有重复元素
        set<long long> hashset;

        // 存储最终的和
        long long result = 0;

        // 循环变量 i,初始值为 1
        int i = 1;

        // 计数器 ans,表示已经插入集合的元素个数
        int ans = 1;

        // 循环,直到插入满足条件的 n 个元素
        while (ans <= n) {
            // 尝试插入 i,如果插入成功,则增加 result,并插入 target - i
            if (hashset.insert(i).second) {
                result += i;
                hashset.insert(target - i);

                // 增加插入元素的计数器
                ans++;
            }

            // 增加循环变量 i
            i++;
        }

        // 返回最终结果对 1000000007 取模
        return result % 1000000007;
    }
};

简单讲一下set.insert()的返回值。
在C++的setunordered_set中,insert方法的返回值是一个pair类型,其中包含一个迭代器和一个布尔值。因为插入重复/已经存在的数为产生插入失败,这个布尔值的second成员指示插入是否成功。如果插入成功,secondtrue,如果元素已经存在,secondfalse

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值