首页 > 其他分享 >lc2963 统计好分割方案的数目

lc2963 统计好分割方案的数目

时间:2024-03-21 22:45:03浏览次数:23  
标签:分割 lc2963 nums int back vp mp 数目

给定正整数数组nums[n],将数组分割成1个或多个连续子数组,如果不存在包含了相同数字的两个子数组,则认为是一种好分割方案,求好分割方案的数目,结果对1000000007取模。
1<=n<=1e5; 1<=nums[i]<=1e9

相同的数字只能分到同一个子数组,转化成区间合并问题。然后枚举每个可以分割的位置,选或不选,有两种方案,所有位置相乘即为结果。

class Solution {
public:
    int numberOfGoodPartitions(vector<int>& nums) {
        map<int,vector<int>> mp;
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            auto it = mp.find(nums[i]);
            if (it == mp.end()) {
                mp[nums[i]].push_back(i);
            } else {
                vector<int> &v = it->second;
                if (v.size() == 1) {
                    v.push_back(i);
                } else {
                    v.back() = i;
                }
            }
        }
        vector<pair<int,int>> vp;
        for (auto &[k,v]:mp) {
            if (v.size() > 1) {
                vp.push_back({v[0], v[1]});
            }
        }
        sort(vp.begin(), vp.end());
        int L = -1, R = 0, cnt = 0;
        for (auto [x,y] : vp) {
            if (L == -1) {
                L = x; R = y;
            } else {
                if (x <= R) {
                    R = max(R, y);
                } else {
                    cnt += R-L;
                    L = x; R = y;
                }
            }
        }
        if (L != -1) {
            cnt += R-L;
        }
        int ans = 1;
        for (int i = 1; i < n-cnt; i++) {
            ans *= 2;
            ans %= 1000000007;
        }
        return ans;
    }
};

标签:分割,lc2963,nums,int,back,vp,mp,数目
From: https://www.cnblogs.com/chenfy27/p/18088412

相关文章

  • 131. 分割回文串c
    /***Returnanarrayofarraysofsize*returnSize.*Thesizesofthearraysarereturnedas*returnColumnSizesarray.*Note:Bothreturnedarrayand*columnSizesarraymustbemalloced,assumecallercallsfree().*/charc[30][30];booljudge(ch......
  • YOLOv8图像分割:使用ONNX模型进行推理
    基于COCO数据集的YOLOv8目标分割onnx模型推理在本博客中,我们将探讨如何使用YOLOv8目标分割模型进行推理,包括图片,视频文件,摄像头实时分割,特别是ONNX在不同大小(YOLOv8n,YOLOv8s,YOLOv8m,YOLOv8l,YOLOv8x)的模型上进行的实验。我们还将讨论所需的环境配置,代码实现,以及如何......
  • 代码随想录算法训练营day27 | leetcode 39. 组合总和、40. 组合总和 II、131. 分割回
    目录题目链接:39.组合总和-中等题目链接:40.组合总和II-中等题目链接:131.分割回文串-中等题目链接:39.组合总和-中等题目描述:给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的所有不同组合,并以列表形......
  • 代码随想录算法训练营第27天|39. 组合总和|40.组合总和II|131.分割回文串
    代码随想录算法训练营第27天|39.组合总和|40.组合总和II|131.分割回文串详细布置39.组合总和本题是集合里元素可以用无数次,那么和组合问题的差别其实仅在于startIndex上的控制题目链接/文章讲解:https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%9......
  • [Python初阶]2255.统计是给定字符串前缀的字符串数目
    目录     2255.统计是给定字符串前缀的字符串数目①.题目②.问题分析③.startswith()方法理解与说明Ⅰ.定义和用法 Ⅱ.语法 ④.问题解决⑤总结     2255.统计是给定字符串前缀的字符串数目①.题目②.问题分析需求:统计列表words中,是字......
  • 推荐收藏!5款很好用的免费PDF分割工具
    在数字化时代,PDF文件因其稳定性和广泛兼容性而成为信息共享的首选格式。然而,随着PDF文件在工作和日常生活中的广泛应用,我们经常需要对这些文件进行管理,其中之一便是分割操作。无论是为了便于分享、打印还是归档,将一个多页的PDF文件拆分成多个单独的文件成为了一项常见的需求。......
  • 奇怪的回溯增加了 | leetcode131分割回文串
    题目要求:给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案示例1:输入:s="aab"输出:[["a","a","b"],["aa","b"]]示例2:输入:s="a"输出:[["a"]]上述为常规做法,这里回溯的时候是i+1的,就很正常 这是我第一次做的时候自己憋出来......
  • 浅浅了解一下图像分割(pytorch框架)
    1、图像分割是什么         图像分割分类是对图像中属于特定类别的像素进行分类的过程,因此图像分割可以认为是按像素进行分类的问题。        传统的图像分割算法均是基于灰度值的不连续和相似的性质。而基于深度学习的图像分割技术则是利用卷积神经网络,......
  • Revit中圆弧的轨线分割(分段、分节)逻辑
    Revit中圆弧的轨线分割(分段、分节)逻辑问题由来早先开发一个插件,有个为风管模型内外都套一层模型的(内衬、外衬)的需求。Revit管类(管道、风管)模型本身就有添加内外衬的功能,但是对于复杂的族,添加的就有问题了,可能无法将模型包裹,也可能会出现突出的边角。而且Revit管类模型是实心表......
  • lc2250 统计包含每个点的矩形数目
    有n个矩形,第i个矩形左下角在(0,0)处,右上角在(l[i],h[i])。另给出m个点(x[i],y[i]),问有多少个矩形覆盖了这个点,点在边上也算是覆盖。1<=n,m<=5e4;1<=l[i],h[i]<=1e9;1<=h[i],y[i]<=100;所有矩形互不相同,所有查询点互不相同。二维偏序统计问题,可以离线处理,先对其中一维排序,将......