首页 > 其他分享 >2799.统计完全子数组的数目-356

2799.统计完全子数组的数目-356

时间:2023-07-31 21:11:24浏览次数:40  
标签:nums int ++ 356 2799 数组 数目 size

统计完全子数组的数目

给你一个由 正 整数组成的数组 nums 。

如果数组中的某个子数组满足下述条件,则称之为 完全子数组 :

子数组中 不同 元素的数目等于整个数组不同元素的数目。
返回数组中 完全子数组 的数目。

子数组 是数组中的一个连续非空序列。

示例 1:

输入:nums = [1,3,1,2,2]
输出:4
解释:完全子数组有:[1,3,1,2]、[1,3,1,2,2]、[3,1,2] 和 [3,1,2,2] 。
示例 2:

输入:nums = [5,5,5,5]
输出:10
解释:数组仅由整数 5 组成,所以任意子数组都满足完全子数组的条件。子数组的总数为 10 。

提示:

\(1 <= nums.length <= 1000\)
\(1 <= nums[i] <= 2000\)

解题思路1:暴力解

本来没想使用暴力解的,看着这个题目就像是双指针的问题。但是看着这个数据量,算了一下时间复杂度以及周赛的排名,还是默默写下了这个违背初心的解法。。。。关键:统计不同元素的数目时不要使用set,因为set的插入是O(log(n))的,需要使用map,插入的时间复杂度是O(1)的。

code1

class Solution {
public:
    //子数组的不同元素的数目和整个数组的不同元素数目相同
    //双重遍历判断是否符合条件
    
    int countCompleteSubarrays(vector<int>& nums) {
        
        int ans = 0;
        unordered_map<int,int> cnt;
        for(auto item : nums) cnt[item] ++;
        
        for(int i = 0;i < nums.size();i ++)
        {
            unordered_map<int,int> has;
            for(int j = i;j < nums.size();j ++)
            {
                has[nums[j]] ++;
                int len1 = cnt.size();
                int len2 = has.size();
                if(len1 == len2)
                {
                    ans += nums.size() - j;
                    break;
                }
            }
        }
        
        return ans;
    }
};

标签:nums,int,++,356,2799,数组,数目,size
From: https://www.cnblogs.com/huangxk23/p/17594503.html

相关文章

  • 大二暑期实习记录(一):处理组件绑定数据错误(数组解构,map()方法)
    好家伙,搬砖 今天在做组件迁移(从一个旧平台迁移到一个新平台)的时候,发现了一些小小的问题: 1.错误描述:在穿梭框组件中,使用"节点配置"方法添加数据的时候,左测数据选择框直接消失了这里我们猜测一下,大概是数据处理出了问题此处,我们使用"数据绑定"绑定数据方法: ......
  • unsigned char数组拷贝数据段,置0数据段,未越界方法
    需要注意的是,自己去写C语言场景下数组的拼接,得不偿失,因为涉及到了数组的拼接,就会有动态分配内存,目前C语言是没有这个功能的;自己写会容易内存报错;因此,在涉及到C语言数组时,最好是只有拷贝,赋值等操作,在一开始确定数组时,把内存分配大一些;这里主要对内存越界的地方做个封装;然后可以实......
  • mongodb 数组文档 addtoset
    MongoDB数组文档addtoset在MongoDB中,数组文档是一种非常有用的数据结构,它可以在一个文档中存储多个值,并且可以非常灵活地对其进行添加、更新和删除操作。其中一个常用的数组操作是addtoset,它用于向数组文档中添加新的元素。数组文档简介在MongoDB中,数组文档是一种嵌套在......
  • python 将数组保存txt
    Python将数组保存为txt文件作为一名经验丰富的开发者,我将向你介绍如何使用Python将数组保存为txt文件。在这篇文章中,我将提供一个简单的步骤表格,然后逐步解释每一步需要做什么,并附上相应的代码和注释。步骤以下是将数组保存为txt文件的步骤。步骤描述1导入所需的模块......
  • iTOP-RK3568开发板Windows 安装 RKTool 驱动
    在烧写镜像之前首先需要安装RKTool驱动。RKTool驱动在网盘资料“iTOP-3568开发板\01_【iTOP-RK3568开发板】基础资料\02_iTOP-RK3568开发板烧写工具及驱动”路径下。驱动如下图所示:解压缩后,进入文件夹,如下图所示:点击“DriverInstall.exe”,如下图所示:如果出现提示,选择安装,如下......
  • 数组复习片+练习题
    数组的遍历定义一个数组,求和int[]arr={1,2,3,4,5,6,7};intsum=0;for(inti=0;i<arr.length;i++){sum=sum+arr[i];}System.out.println(sum);定义一个数组,统计数组里面一共有多少能够被3整除的数字:in......
  • React(十二):props的函数组件中使用
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>props的函数组件实现</title><scriptsrc="https://unpkg.com/react@18/umd/react.development.js"></script><scriptsr......
  • 歌谣学前端之数组的方法
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷微信公众号前端小歌谣关注公众号带你进入前端学......
  • 暑期竞赛培训 Day 11—— < 树状数组 >
    本文大部分内容来自教练的博客[https://www.cnblogs.com/hbhszxyb/]。树状数组一、适用范围:树状数组是一个查询和修改复杂度都为log(n)的数据结构,常常用于查询任意区间的所有元素之和。与前缀和的区别是支持动态修改,log(n)的时间进行修改,log(n)查询。支持如下操作:[1]单......
  • Java学习-4.数组
    一、数组类型数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致。定义一个数组类型的变量,使用数组类型“类型[]”,例如,int[]。和单个基本类型变量不同,数组变量初始化必须使用newint[5]表示创建一个可容纳5个int元素的数组。Java的数组有几个特点:数组所有元素......