Leetcode697. 数组的度

news2024/9/23 11:27:19

Every day a leetcode

题目来源:697. 数组的度

解法1:哈希

我们这样构建哈希表 unordered_map<int, vector> umap:

  • key:数组元素 nums[i]
  • value:三元组[count, first, last],分别代表元素 nums[i] 的出现次数、第一次出现的下标和最后出现的下标。

我们遍历一次数组 nums 即可构建出该哈希表。

变量 maxTimes 记录出现频数的最大值,minLen 记录与 nums 拥有相同大小的度的最短连续子数组的长度,均初始化为 0。

遍历哈希表:

  • 当 count > maxTimes 时,更新 maxTimes = count,minLen = last - first + 1;
  • 当 count == maxTimes 时,只更新 minLen = min(last - first + 1, minLen);

最后的 minLen 即为答案。

代码:

/*
 * @lc app=leetcode.cn id=697 lang=cpp
 *
 * [697] 数组的度
 */

// @lc code=start
class Solution
{
public:
    int findShortestSubArray(vector<int> &nums)
    {
        int n = nums.size();
        unordered_map<int, vector<int>> umap;
        for (int i = 0; i < n; i++)
        {
            if (umap.count(nums[i]))
            {
                umap[nums[i]][0]++;
                umap[nums[i]][2] = i;
            }
            else
                umap[nums[i]] = {1, i, i};
        }
        int maxTimes = 0;
        int minLen = 0;
        for (auto it = umap.begin(); it != umap.end(); it++)
        {
            if (it->second[0] > maxTimes)
            {
                maxTimes = it->second[0];
                minLen = it->second[2] - it->second[1] + 1;
            }
            else if (it->second[0] == maxTimes)
                minLen = min(minLen, it->second[2] - it->second[1] + 1);
        }
        return minLen;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是原数组 nums 的长度,我们需要遍历原数组和哈希表各一次,它们的大小均为 O(n)。

空间复杂度:O(n),其中 n 是原数组 nums 的长度,最坏情况下,哈希表和原数组等大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/510750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring03--Spring基于注解的AOP、Spring事务

Spring基于注解的AOP 一、基于注解的AOP介绍 AOP注解方式 和 XML方式完成的功能是一样&#xff0c;只是采用方式不同而已。将原有的XML方式使用注解注意替代 二、环境搭建 使用Spring02中Spring基于配置文件的AOP的环境搭建 三、使用注解替换XML的配置步骤 1、通知类使用…

边缘化你必须知道的一件事!(FEJ知识点总结)

vins和g2o边缘化的异同&#xff1a;(已经做到ppt里面了&#xff0c;简单回顾一下) 1.《视觉slam14讲》中提及的边缘化(G2O边缘化)是在计算求解过程中&#xff0c;先消去路标点变量&#xff0c;实现先求解相机位姿&#xff0c;然后再利用求解出来的相机位姿反过来计算路标点的过…

qt creator添加build步骤删除某个文件

参考&#xff1a;https://blog.csdn.net/weixin_44436546/article/details/113587115 1. windows下配置&#xff1a; 添加build步骤&#xff1b;在commad栏输入cmd,会弹出C:\Windows\system32\cmd.exe&#xff1b;在Arguments栏输入/c release\upgrade.o&#xff1b;Working …

【数据结构】C语言实现双向链表(带头结点、循环)

C语言实现双向链表&#xff08;带头结点、循环&#xff09; 一、带头结点的循环双向链表二、结点与接口定义三、实现3.1 申请节点3.2 初始化3.3 打印3.4 尾插3.5 头插3.6 尾删3.7 判断链表为空断言3.8 头删3.9 查找find3.10 插入insert-在pos之前插入3.11 头插尾插复用insert3.…

机器学习算法实战(scikit-learn版本)---线性回归

目录 文章目标&#xff1a; 1&#xff0c;导入库 2&#xff0c;导入数据集 3&#xff0c;缩放/归一化训练数据 4,创建并拟合回归模型 5,查看参数 6,预测 7&#xff0c;可视化 有一个开源的、商业上可用的机器学习工具包&#xff0c;叫做[scikit-learn](https://scik…

阿里、京东等大厂年薪50w的测试都是什么水平?

各位做测试的朋友&#xff0c;但凡经历过几次面试&#xff0c;那么你一定曾被问到过以下问题&#xff1a; 1、在Linux环境下&#xff0c;怎么执行web自动化测试&#xff1f; 2、Shell如何&#xff0c;Docker熟悉吗&#xff1f; 3、全链路的压测实操过吗&#xff0c;如何推进与开…

【Linux】基本权限

&#x1f601;作者&#xff1a;日出等日落 &#x1f514;专栏&#xff1a;Linux 任何值得到达的地方&#xff0c;都没有捷径。 目录 Linux权限: 权限的概念&#xff1a; Linux上面的用户分类&#xff1a; Linux权限管理 文件访问者的分类&#xff08;人&#xff09; 文件…

小心白蛇!PyPI仓库被持续投放White Snake后门组件

背景 墨菲安全实验室在持续监测开源软件仓库中的投毒行为&#xff0c;4 月 14 日起陆续发现至少 41 个包含白蛇&#xff08;White Snake&#xff09;后门的 Python 包被发布到 PyPI 仓库&#xff0c;目前相关的后门包仍在持续发布。 事件简述 白蛇 &#xff08;WhiteSnake&a…

三种方法教你让模糊照片秒变高清图

现在随着数字相机和智能手机的普及&#xff0c;我们拍摄的照片数量越来越多&#xff0c;但是有些照片可能因为环境或技术等原因导致模糊不清&#xff0c;这时候我们就需要使用一些软件或工具来让照片变得清晰&#xff0c;以满足我们的需求。 下面介绍三种常用的照片变清晰的方…

专科生学习云计算的就业前景如何?

作为专科学历学习云计算&#xff0c;就业前景肯定是有的。因为目前开设云计算这门专业主要也是专科院校&#xff0c;目前入行的学历要求也是专科为起点&#xff0c;更加侧重技术技能水平&#xff0c;技术过关了才能找到合适的工作。 云计算作为一种新兴的IT技术方向&#xff0…

AI别来搅局,chatGPT的世界不懂低代码

ChatGPT单月访问量再创新高 根据SimilarWeb统计&#xff0c;ChatGPT上月全球访问量17.6亿次&#xff0c;已超越必应、鸭鸭走DuckDuckGo等其他国际搜索引擎&#xff0c;并达到谷歌的2%&#xff0c;百度的60%。 这会&#xff0c;程序员失业的段子又得再来一遍了&#xff1a; 拖…

Qt+WebRTC学习笔记(七)ubuntu22.04下搭建coturn(STUN/TURN)

前言 因工作原因&#xff0c;很长时间没更新相关文档了&#xff0c;笔者之前测试时&#xff0c;一直使用示例自带的公网中转服务器。考虑到后期项目需要&#xff0c;笔者在线搭建一个coturn服务器测试&#xff0c;供有需要的小伙伴使用 一、安装coturn 若需要最新版本的cotu…

Linux修改文件权限

目录 1、常用操作 2、文件属性 3、chmod命令详解 1.修改文件属主,也可以修改文件属组 2.修改文件权限 4.chgrp命令详解 1、常用操作 查看权限操作命令:# ls -l 在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限&#xff1a; chown (change ownerp)…

[python] Python类型提示指北

Python3.5 版本引入了类型提示&#xff08;Type Hints&#xff09;&#xff0c;它允许开发者在代码中显式地声明变量、函数、方法等的类型信息。这种类型声明不会影响 Python 解释器的运行&#xff0c;但可以让 IDE 和静态分析工具更好地理解代码&#xff0c;同时提高代码的可读…

《Netty》从零开始学netty源码(五十六)之MessageSizeEstimator

MessageSizeEstimator 在channel的配置类中有一个属性msgSizeEstimator&#xff0c;它的功能就是用来预估消息的大小&#xff0c;它的赋值过程如下&#xff1a; 接口MessageSizeEstimator只有一个方法newHandle()&#xff0c;它返回的接口handle是MessageSizeEstimator的内部类…

SpringBoot基础篇1(搭建环境+基础配置)

一、SpingBoot入门案例 SpringBoot是用来简化Spring应用的初始搭建以及开发过程。 先快速搭建一个SpringBoot&#xff1a; 创建一个空project&#xff0c;再创建SpringBoot模块。 点击Create&#xff0c;出现以下页面配置成功 创建一个控制器测试一下&#xff1a; RestCo…

Centos8搭建SMB服务

这里以Centos8为例&#xff0c;搭建简易的SMB服务。虚拟机配置&#xff1a;内存8G、存储64G、CPU单核四线程、网络NAT模式跳过虚拟机与系统配置部分&#xff0c;不清楚虚拟机配置以及创建的请查阅其他文档此文章只用于练习用&#xff0c;商业和个人用可以见解Truenas系统 更新…

改进YOLOv5 | C3模块改动篇 | 轻量化设计 |骨干引入高效卷积运算 DSConv: Efficient Convolution Operator

论文地址:https://arxiv.org/pdf/1901.01928v1.pdf 引入了一种卷积层的变体,称为DSConv(分布偏移卷积),其可以容易地替换进标准神经网络体系结构并且实现较低的存储器使用和较高的计算速度。 DSConv将传统的卷积内核分解为两个组件:可变量化内核(VQK)和分布偏移。 通过…

C 高级 /Day 2

#include<stdio.h> int Max_arr(int (*arr)[5],int row,int hang) {int max0;//最大值int k1;//循环行for(int i0;i<hang;i){int k1;//循环列for(int j0;j<row;j){//控制行和列for(int m0;m<hang;m){for(int n0;n<row;n){//如果是第m行的其他的元素&#xf…

MySQL原理(一):逻辑存储结构

前言 从本文开始&#xff0c;我将分享一下近期学习 MySQL 的笔记&#xff0c;其中大部分来源于极客时间的《MySQL实战45讲》、小林coding、以及部分其他博客和书籍。 这次系列文章着重讲 MySQL 的原理部分&#xff0c;主要是用于面试&#xff0c;也就是我们常说的八股&#x…