LeetCode697

server/2025/3/11 2:49:33/

好的,根据你提供的代码和LeetCode题号(697),我将帮助你生成一个结构化的Markdown文档。首先,我们需要补充一些必要的信息,如题目描述、示例、思路分析等。如果你能提供这些信息会更好,否则我会基于常见的题解模式进行推测。

以下是完整的Markdown文档:

# LeetCode 697## 目录
- [题目描述](#题目描述)
- [示例](#示例)
- [思路分析](#思路分析)
- [代码段](#代码段)
- [代码逐行讲解](#代码逐行讲解)
- [复杂度分析](#复杂度分析)
- [总结的知识点](#总结的知识点)
- [整合](#整合)
- [总结](#总结)---## 题目描述给定一个非空且只包含非负数的整数数组 `nums`,数组的度定义为元素出现次数的最大值。找到与原数组具有相同度的最短连续子数组,并返回其长度。---## 示例### 示例 1**输入:**
```java
nums = [1, 2, 2, 3, 1]

输出:

2

解释:

  • 数组的度是2,因为元素2出现了两次。
  • 最短的子数组是从索引1到2,长度为2。

示例 2

输入:

nums = [1,2,2,3,1,4,2]

输出:

6

解释:

  • 数组的度是3,因为元素2出现了三次。
  • 最短的子数组是从索引1到6,长度为6。

思路分析

问题核心

找到与原数组具有相同度的最短连续子数组,并返回其长度。

思路拆解

  1. 统计每个元素的出现次数
    • 使用哈希表记录每个元素的出现次数。
  2. 确定数组的度
    • 找出出现次数最多的元素的次数。
  3. 寻找最短子数组
    • 使用滑动窗口技术来找到满足条件的最短子数组。

代码段

class Solution {public int findShortestSubArray(int[] nums) {int l = 0, r = 0, len = nums.length, res = len + 1;Map<Integer, Integer> map = new HashMap<>();Map<Integer, Integer> map1 = new HashMap<>();int count = 0;for (int i : nums) {map1.put(i, map1.getOrDefault(i, 0) + 1);count = Math.max(count, map1.get(i));}while (r < len) {map.put(nums[r], map.getOrDefault(nums[r], 0) + 1);r++;while (map.get(nums[r - 1]) == count) {map.put(nums[l], map.get(nums[l]) - 1);res = Math.min(res, r - l);l++;}}return res;}
}

在这里插入图片描述


代码逐行讲解

  1. 初始化变量

    int l = 0, r = 0, len = nums.length, res = len + 1;
    
    • 初始化左右指针lr,数组长度len,以及结果res
  2. 统计每个元素的出现次数

    Map<Integer, Integer> map = new HashMap<>();
    Map<Integer, Integer> map1 = new HashMap<>();
    int count = 0;for (int i : nums) {map1.put(i, map1.getOrDefault(i, 0) + 1);count = Math.max(count, map1.get(i));
    }
    
    • 使用map1统计每个元素的出现次数,并找出最大出现次数count
  3. 滑动窗口查找最短子数组

    while (r < len) {map.put(nums[r], map.getOrDefault(nums[r], 0) + 1);r++;while (map.get(nums[r - 1]) == count) {map.put(nums[l], map.get(nums[l]) - 1);res = Math.min(res, r - l);l++;}
    }
    
    • 使用滑动窗口技术查找满足条件的最短子数组。
  4. 返回结果

    return res;
    

复杂度分析

时间复杂度

  • 统计元素出现次数:O(n)
  • 滑动窗口遍历:O(n)
  • 总时间复杂度:O(n)

空间复杂度

  • 使用了两个哈希表存储元素及其出现次数:O(n)

总结的知识点

  1. 哈希表的应用
    • 用于统计元素出现次数。
  2. 滑动窗口技术
    • 用于高效查找满足条件的最短子数组。
  3. 数组度的概念
    • 数组中元素出现次数的最大值。

整合

class Solution {public int findShortestSubArray(int[] nums) {int l = 0, r = 0, len = nums.length, res = len + 1;Map<Integer, Integer> map = new HashMap<>();Map<Integer, Integer> map1 = new HashMap<>();int count = 0;for (int i : nums) {map1.put(i, map1.getOrDefault(i, 0) + 1);count = Math.max(count, map1.get(i));}while (r < len) {map.put(nums[r], map.getOrDefault(nums[r], 0) + 1);r++;while (map.get(nums[r - 1]) == count) {map.put(nums[l], map.get(nums[l]) - 1);res = Math.min(res, r - l);l++;}}return res;}
}

总结

通过使用哈希表统计每个元素的出现次数,并结合滑动窗口技术,可以高效地找到与原数组具有相同度的最短连续子数组。



http://www.ppmy.cn/server/174077.html

相关文章

《C++ 构造、拷贝构造与析构函数:对象的诞生、克隆与消逝之旅》

类的6个默认成员函数 构造函数 是对一个对象实例化时的初始化 例如在C语言中写的堆的时候要初始化StackInit&#xff0c;而c祖师爷写的构造函数本质上就是自动调用初始化。 构造函数默认构造函数自己写的&#xff08;符合规定的显示表达式&#xff09; 注&#xff1a;一般情况下…

牛客python蓝桥杯11-32(自用)

11 import os import sysdef huiwen(str):length len(str)# if length 0:# return -1result []for i in range(length-1): # 0 - length-2for j in range(i2,length1):# 取出从索引 i 到 j-1 的子串s str[i:j]# 正序倒序if s s[::-1]:result.append(len(s))if result…

Android networkSecurityConfig 代码配置

Android Network Security Configuration 的实现指南 在Android开发中&#xff0c;合理配置网络安全是非常重要的。尤其是在处理敏感数据时&#xff0c;保护用户的信息安全显得尤为重要。Android提供了一种灵活的机制来配置网络安全策略&#xff0c;我们将通过“网络安全配置”…

linux 设置服务开机自启动

创建服务文件 进入服务文件路&#xff1a; /etc/systemd/system/创建服务文件 vi getway-serve.service[Unit] Descriptiongetway-serve Afternetwork.target [Service] Userroot WorkingDirectory/home/app/jars/ ExecStart/usr/local/jdk1.8/bin/java -jar -Dfile.encodin…

Vue3基础之常用Api

setup 组件中所用到的数据、方法等都需要在setup中使用 setup函数有两种返回值 1.返回一个对象&#xff0c;则对象里面的方法、属性、数据都能在模板中直接使用 <template> <h1>一个人的消息</h1> <h2>姓名:{{ name }}</h2> <h2>年龄:{{ag…

力扣热题 100:图论专题经典题解析

文章目录 一、岛屿数量&#xff08;题目 200&#xff09;1. 题目描述2. 示例3. 解题思路4. 代码实现&#xff08;Java&#xff09;5. 复杂度分析 二、腐烂的橘子&#xff08;题目 994&#xff09;1. 题目描述2. 示例3. 解题思路4. 代码实现&#xff08;Java&#xff09;5. 复杂…

php代码审计工具-rips

代码审计 代码审计就是检查所写的代码中是否有漏洞&#xff0c;检查程序的源代码是否有权限从而被黑客攻击&#xff0c;同时也检查了书写的代码是否规范。通过自动化的审查和人工审查的方式&#xff0c;逐行检查源代码&#xff0c;发现源代码中安全缺陷所造成的漏洞&#xff0…

用Python实现PDF转Doc格式小程序

用Python实现PDF转Doc格式小程序 以下是一个使用Python实现PDF转DOC格式的GUI程序&#xff0c;采用Tkinter和pdf2docx库&#xff1a; import tkinter as tk from tkinter import filedialog, messagebox from pdf2docx import Converter import osclass PDFtoDOCConverter:de…