java数据结构与算法刷题-----LeetCode697. 数组的度

从原理到调试:一次搞懂Camera Sensor的曝光、增益与帧率三角关系 本文深入解析Camera Sensor中曝光、增益与帧率之间的动态平衡关系,揭示低光环境下帧率下降的根本原因。通过实际调试案例和底层公式分析,帮助开发者理解如何优化相机参数设置,实现画质与流畅度的最佳平衡。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

方法一:hash表

此方法是工作中时间可以使用的,因为它的时间和空间复杂度都相对平衡,也较低。下面介绍的方法二,工作中是坚决不可以使用的,因为会造成大量的空间浪费。

解题思路
  1. 先遍历一遍数组,记录每个元素的出现次数,起始下标和结尾下标
  2. 然后遍历hash表,找到最大出现次数的元素,然后通过len = 结尾下标 - 起始下标 +1获取其长度
  3. 如果遇到相同出现次数的元素,选择长度更小的作为答案(题目要求)
代码:时间复杂度O(n) 空间复杂度O(n)

在这里插入图片描述

class Solution {
    public int findShortestSubArray(int[] nums) {
        //哈希表,key为nums数组中的元素值。value为int数组,共3个元素保存当前key的[度,起始下标,结尾下标]
        Map<Integer, int[]> map = new HashMap<Integer, int[]>();
        int n = nums.length;//数组长度
        for(int i = 0;i < n ; i++){
            if(map.containsKey(nums[i])){//如果当前map已经有该数字
                map.get(nums[i])[0]++;//当前数字的出现次数+1
                map.get(nums[i])[2] = i;//当前数字出现的末尾下标
            }else map.put(nums[i],new int[]{1,i,i});//第一次遇到就放入map,出现次数为1,起始下标为i,结尾下标为i
        }
        int maxNum = 0, minLen = 0;//maxNum保存拥有最大的度的元素,minLen保存,包含最大度的所有元素且尽可能短的数组长度
        for(Map.Entry<Integer, int[]> entry: map.entrySet()){
            int[] arr = entry.getValue();
            if(maxNum < arr[0]){//如果当前保存的 元素的度, 没有当前遍历元素的度大
                maxNum = arr[0];//就保留大的度,也就是当前遍历元素的这个,更大的度
                minLen = arr[2] - arr[1] +1;//更新子数组长度
            }else if(maxNum == arr[0]){//如果两个元素的度相同,
                //我们保留更短的子数组长度
                if(minLen>arr[2] - arr[1] + 1) minLen = arr[2] - arr[1] +1;
            }
        }
        return minLen;//根据题意,返回包含度最大所有元素的最短子数组长度
    }
}

方法二:数组下标线性索引

此方法的做题效率更高,对于某些题目来说,确实无论是实际应用和做题的角度来说,都是不错的方法。但不是这道题应该使用的方法。对于这道题也只能做题时可以使用一下了。因为它用数组中的值的范围,作为数组x的下标,数组x作为hash表,来进行常数级的存取。但是假设,数组中存储的元素范围是1 ~ 100000000,那么就需要申请长度为100000000的数组空间。假设有一个数组需要处理,[1,2,3,4,4,4,10000000000],如果使用正经的hash表,只需要7个空间。而使用这种方法,空间复杂度就是10000000000。如果实际应用场景你写出这种代码,100%会被辞退的。因此,这个方法,对于这道题,只能大家做题使用,千万不要放到工作场景中。

时间复杂度O(n), 空间复杂度O(maxValue - minValue + 1),空间复杂度是数组中值的取值范围。真的了解一下即可,不推荐使用,纯粹在投机取巧

在这里插入图片描述

class Solution {
    /**此方法空间复杂度过高,不推荐工作场景下使用,假设nums = [1,2,2,10000000000] 那么空间复杂度就是 10000000000,
    * 而hash表空间复杂度是4.
    */
    public int findShortestSubArray(int[] nums) {
        /** 首先,先建立一个数组,用下标来表示nums中所有元素的值。最大值-最小值 +1 就是nums的value值范围 */
        int min=Integer.MAX_VALUE;//保存数组中元素的最小值
        int max=Integer.MIN_VALUE;//保存数组中元素的最大值
        //获取最大最小值
        for(int i: nums){
            max=Math.max(max,i);
            min=Math.min(min,i);
        }
        int[] count=new int[max-min+1];//建立数组,数组下标对应nums元素的取值范围,空间复杂度会非常高
        int maxCount=0;//找到元素的最大出现次数
        //找到最大次数
        for(int i:nums){//依次遍历数组元素
            //以当前元素 - min 作为下标,让count数组对应值+1,代表这个值出现了一次
            //因为数组下标从0开始,count[0]代表nums数组的最小值,i - min就是count对应下标
            maxCount=Math.max(maxCount,++count[i-min]);//保存出现次数最大的
        }
        if(maxCount==1){//如果最大出现次数为1,直接返回1
            return 1;
        }
        /****否则需要寻找出现次数最大(也就是 == maxCount)的元素,然后获取其起始和末尾下标 */
        int res=nums.length;
        int start,end=nums.length-1;
        int num=0;
        //寻找
        for(int i=0;i<count.length;i++){
            if(count[i]!=maxCount){
                continue;
            }
            start=0;
            end=nums.length-1;
            num=min+i;
            while(start<end&&nums[start]!=num){
                start++;
            }
            while(start<end&&nums[end]!=num){
                end--;
            }
            res=Math.min(res,end-start+1);
        }
        return res;
    }
}
从零构建PEMFC仿真模型:MATLAB/Simulink中的模块化拆解与系统集成 本文详细介绍了如何在MATLAB/Simulink环境中从零构建质子交换膜燃料电池(PEMFC)仿真模型,包括电化学模型、气体供应系统和热管理系统的模块化实现。通过多物理场耦合技巧和系统集成策略,帮助工程师和研究者高效开发PEMFC控制策略,优化性能并实现实时仿真。 阅读详情

相关推荐

玄机-Linux权限维持-后门

玄机-Linux权限维持-后门

m0_46439803的博客 767

【leetcode刷题】 64.数组的度——Java版

哈希表

公号:一条coding 1万+

Halcon实战:5分钟搞定金属表面划痕检测(附完整代码解析)

本文提供了一份基于Halcon的金属表面划痕检测实战指南。通过核心的动态阈值算法,快速从图像中提取局部对比度异常区域,并结合形态学后处理与特征筛选,精准识别划痕。文章详解了从代码搭建、参数优化到工业场景适配的全流程,帮助工程师在五分钟内构建稳定高效的机器视觉检测方案。

weixin_29084231的博客 496

Java实现 LeetCode 697 数组的度(类似于数组的map)

697. 数组的度 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例 1: 输入: [1, 2, 2, 3, 1] 输出: 2 解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2. 连续子数组里面拥有相同度的有如下所示: [1, 2, 2, 3, 1],...

南 墙 1万+

Qt 文件对话框(QFileDialog)实战指南 —— 从基础到高级应用

本文是Qt文件对话框(QFileDialog)的实战指南,从基础静态函数调用到高级对象模式应用,全面解析了文件选择、保存、目录选取及多选等核心功能。文章深入探讨了MIME类型过滤、自定义侧边栏、信号槽实时响应及状态持久化等高级技巧,并提供了跨平台开发中的避坑指南与最佳实践,帮助开发者高效、稳健地集成文件操作功能。

weixin_29306261的博客 376

避坑指南:PVE下N卡直通错误代码43的终极解决思路与dmesg日志分析

本文详细解析了PVE环境下NVIDIA显卡直通时遇到的错误代码43问题,提供了从dmesg日志分析到BIOS配置、PVE宿主机优化及虚拟机设置的完整解决方案。特别针对GTX1060等显卡,分享了驱动版本选择、ROM修补及高级排错技巧,帮助用户彻底解决这一常见难题。

weixin_28693683的博客 292

5. leetCode--697数组的度

文章目录1. `leetCode`--697数组的度1.1 问题描述1.2 问题分析1.3 代码实现1.4 测试代码1.5 结果分析 1. leetCode–697数组的度 题目连接:https://leetcode-cn.com/problems/degree-of-an-array 题目类型: 简单数组 1.1 问题描述 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是找到与 nums 拥有相同大小的度的最短连续子数组

weixin_45267102的博客 365

Hugging Face 最新开源 SmolVLA 小模型入门教程(一)

今天,我们介绍SmolVLA,这是一个紧凑型(450M)、开源的视觉-语言-动作模型,专为机器人设计,可在消费级硬件上运行。 仅在带有lerobot标签的开源社区共享数据集上进行预训练。 SmolVLA-450M在模拟环境(LIBERO、Meta-World)和真实世界任务(SO100、SO101)中,表现优于规模更大的VLA模型及强基线模型如ACT。 支持异步推理,响应速度提升30%,任务吞吐量提升2倍。

2506_90492529的博客 4080

Leetcode 697.数组的度

Leetcode 697.数组的度 数组的度 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例 1: 输入: [1, 2, 2, 3, 1] 输出: 2 解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2. 连续子数组里面拥有相同度的有如下所示: [1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [

EIUC_Thread的博客 220

基于瑞芯微RK3562 四核 ARM Cortex-A53 + 单核 ARM Cortex-M0——Linux应用开发手册

本文主要介绍TL3562-MiniEVM评估板的AMP(Asymmetric Multi-processing)开发案例,介绍基于Linux + RT-Thread(RTOS)、Baremetal的AMP案例的开发环境搭建。

创龙,嵌入式一体化解决方案商 411

注意力机制模块:注意力机制新宠:EMA 注意力(高效多尺度注意力),即插即用,涨点明显

无降维成为共识:越来越多的研究者意识到,传统注意力机制的通道降维操作会造成不可逆的信息损失。EMA 提出的“保留每个通道信息”理念正在成为新一代注意力模块的设计标准。分组并行走向成熟:特征分组 + 并行处理的设计范式已在多个前沿架构中得到验证,兼顾了表达能力和计算效率。多尺度与跨空间融合:单纯的多尺度或单纯的跨空间交互都已无法满足复杂任务需求,两者的深度融合是当前的主流方向。边缘部署导向:2026 年的新论文越来越关注在资源受限设备上的高效运行,轻量化设计成为评估注意力模块的重要指标。

ZXSXJ的博客 952

【LeetCode】第697题——数组的度(难度:简单)

【LeetCode】第697题——数组的度(难度:简单)题目描述解题思路代码详解注意点 题目描述 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例 1: 输入:[1, 2, 2, 3, 1] 输出:2 解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2. 连续子数组里面拥有相同度的有如下所示: [1, 2, 2, 3, 1], [1, 2, 2,

Se7en_Dayz的博客 295

编程实践:寒武纪-LLM&VLM模型量化&部署

本文介绍了在MLU370-S4平台上对大模型(LLM/VLM)进行量化的两种方法:SmoothQuant和WeightOnly。以Qwen2-VL-2B模型为例,详细说明了两种量化方式的命令行参数配置,包括必须设置的per_channel选项和量化参数调整建议。量化完成后,提供了模型部署的具体命令示例,包含设备分配、端口设置、并行度等关键参数。文章强调在MLU370芯片上需要手动设置block_size,并指出两种量化方式只能二选一使用。配套资料已上传至百度网盘供参考。

微风❤水墨 510

《力扣算法训练提升》数组篇-打卡数组统计-【697】数组的度​

给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。

囧么肥事 599

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

697. 数组的度

题目地址:https://leetcode-cn.com/problems/degree-of-an-array/submissions/ 代码地址:https://github.com/javartisan/edx-ds/blob/master/src/main/java/com/javartisan/leetcode/Solution697.java import jav...

weixin_30387423的博客 147

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Leetcode697. 数组的度

Leetcode697. 数组的度题目描述及思路Map遍历操作maxmin双层算法 题目描述及思路 数组的度 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例 1: 输入:[1, 2, 2, 3, 1] 输出:2 解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2. 连续子数组里面拥有相同度的有如下所示: [1, 2, 2, 3, 1], [1,

qq_51131591的博客 242

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

leetcode -697 - 数组的度 - java版

文章目录题目代码 题目 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例 1: 输入: [1, 2, 2, 3, 1] 输出: 2 解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2. 连续子数组里面拥有相同度的有如下所示: [1, 2, 2, 3, 1...

lingle1的博客 430

❤️思维导图整理大厂面试高频数组15: 介绍Entry类和海象运算符, 哈希表解决最短连续子数组, 力扣697❤️

此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), 毕竟算法不是做了一遍就能完全记住的. 所以本文适合已经知道解题思路和方法, 想进一步加强理解和记忆的朋友, 并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解, 然后再看本文内容). 关于本专栏所有题目的目录链接, 刷算法题目的顺序/注意点/技巧, 以及思维导图源文件问题请点击此链接. 想进大厂.

孤柒的博客 1万+

3、leetcode 697 数组的度

leetcode 697 数组的度 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例 1: 输入:[1, 2, 2, 3, 1] 输出:2 解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2. 连续子数组里面拥有相同度的有如下所示: [1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2,

hh_ylf的博客 418

697. 数组的度——Java

给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例 1: 输入: [1, 2, 2, 3, 1] 输出: 2 解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2. 连续子数组里面拥有相同度的有如下所示: [1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2] 最短连续子数组[

lz_Shawn的博客 423

LeetCode 697. 数组的度

目录结构 1.题目 2.题解 1.题目 给定一个非空且只包含非负数的整数数组nums, 数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是找到与nums拥有相同大小的度的最短连续子数组,返回其长度。 示例: 输入: [1, 2, 2, 3, 1] 输出: 2 解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2. 连续子数组里面拥有相同度的有如下所示: [1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2],...

HarvestWu的博客 184

[LeetCode] 697. 数组的度(Java)

[LeetCode] 697. 数组的度(Java), 给定一个非空且只包含非负数的整数数组 nums,数组的 度 的定义是指数组里任一元素出现频数的最大值。你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。...

是猛男|二次元|玩原神|含盐量极高|不是GAY|不玩币|不接单 353

Leetcode.697 数组的度

Leetcode

感觉画质不如...原神的博客 127

【每日一题】 697. 数组的度

【每日一题】 697. 数组的度 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一、题目描述 难度: 简单 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 提示: nums.length 在1到 50,000 区间范围内。 nums[i] 是一个在 0 到 49,999 范围内的整数。 示例 1: 输入:[1, 2, 2, 3, 1] 输出:2 解

Zack_tzh的博客 422

leetcode刷题篇 697题 数组的度 java版

题目概览: 思路分析: 看代码: class Solution { public int findShortestSubArray(int[] nums) { HashMap<Integer, Integer> count = new HashMap<>(); HashMap<Integer, Integer> left = new HashMap<>(); HashMap<Integer, In

weixin_45806131的博客 267
上一篇: java数据结构与算法刷题-----LeetCode667. 优美的排列 II
下一篇: java数据结构与算法刷题-----LeetCode766. 托普利茨矩阵
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值