【Leetcode】697. 数组的度

news/2024/11/23 1:01:02/
  • [哈希表]

Given a non-empty array of non-negative integers nums, the degree of this array is defined as the maximum frequency of any one of its elements.

Your task is to find the smallest possible length of a (contiguous) subarray of nums, that has the same degree as nums.

Example 1:

Input: nums = [1,2,2,3,1]
Output: 2

Explanation:

  • The input array has a degree of 2 because both elements 1 and 2 appear twice.
  • Of the subarrays that have the same degree:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
  • The shortest length is 2. So return 2.

Example 2:

Input: nums = [1,2,2,3,1,4,2]
Output: 6

Explanation:

  • The degree is 3 because the element 2 is repeated 3 times.
  • So [2,2,3,1,4,2] is the shortest subarray, therefore returning 6.

Constraints:

nums.length will be between 1 and 50,000.
nums[i] will be an integer between 0 and 49,999.

Thought

  • 在一定时间内,没有理解题目意思
  • 直接看的题解^ ~ ^

AC

/** @lc app=leetcode.cn id=697 lang=cpp** [697] 数组的度*/// @lc code=start
class Solution {
public:int findShortestSubArray(vector<int>& nums) {unordered_map<int, vector<int>> mp;int n = nums.size();for(int i = 0; i < n; i++){if(mp.count(nums[i])){mp[nums[i]][0]++;mp[nums[i]][2] = i;}else{mp[nums[i]] = {1, i, i};}}int maxNum = 0, minLen = 0;for(auto& [_, vec] : mp){if(maxNum < vec[0]){maxNum = vec[0];minLen = vec[2] - vec[1] + 1;}else if(maxNum == vec[0]){if(minLen > vec[2] - vec[1] + 1){minLen = vec[2] - vec[1] + 1;}}}return minLen;}
};
// @lc code=end

ac


  • 将数组元素出现的次数,出现某一数值的初始位置和结束位置存放到一个3列的哈希表中
  • 循环遍历,通过最大出现次数将最小长度取出。

Notice

这是C++17引入的一种新的循环形式,被称为范围基于循环(range-based for loop)结构化绑定循环(structured binding loop)

在给定的循环中,map 是一个容器,auto& [_, vec] 是循环的迭代变量,用于迭代容器中的元素。这里使用了结构化绑定(structured binding)的语法来同时绑定键和值。

具体来说,每次迭代时,_(下划线)代表键,vec 代表值。由于循环中使用了引用,所以对 vec 的修改会反映到原始容器中。

这种循环形式可以用于遍历关联容器(如 std::mapstd::unordered_map 等)的键值对。通过使用结构化绑定,我们可以方便地访问容器中的键和值,而不需要使用迭代器或 .first.second 成员函数。

请注意,由于在循环中使用了 _,这表示我们在迭代过程中不关心键的值。这是一种常见的做法,用于避免编译器警告或命名冲突。


http://www.ppmy.cn/news/82668.html

相关文章

python 3的urllib库介绍

Python 3中的urllib模块可以用来处理URL&#xff0c;包括下载和上传文件、创建和读取cookie、访问Web API等。在本文中&#xff0c;我们将详细介绍urllib库中最常用的四个模块&#xff1a;urllib.request、urllib.parse、urllib.error和urllib.robotparser。 一、urllib.reque…

【C++学习第九讲】C++ 整型介绍

文章目录 一、理论1.1 总述1.2 char类型1.3 short类型1.4 int类型1.5 long类型1.6 long long类型 二、代码示例三、细节问题3.1 查看每个整型的位数3.2 sizeof 函数3.3 limits 头文件 一、理论 1.1 总述 在 C 中&#xff0c;整型&#xff08;Integer&#xff09;是一种基本的…

自动驾驶行业迎来大规模发展,“高精度定位”重要性凸显

5月16日&#xff0c;2023 中国 (亦庄) 智能网联汽车科技周暨第十届国际智能网联汽车技术年会在北京隆重召开。工信部装备工业一司一级巡视员苗长兴在在会上表示&#xff1a;2022 年我国搭载辅助自动驾驶系统的智能网联乘用车新车销售量达 700 万辆&#xff0c;同比增长45.6%&am…

Kubernetes1.22.0 部署 metricis-service

概述 Install cfssl cat > proxy-client-csr.json<<EOF {"CN": "aggregator","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN",&quo…

nodejs+vue+elementui大学生多媒体学习系统

前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE(1)课程学习(包括课程分类 课程目录 课程学习等相关操作&#xff09; (2)课程评价 (3)课程统计 (4)相关信息管理(包括基本信息 课程编辑 注册登录等相关操作) 1、 node_modules文件夹(有np…

Baklib分享:做好企业内部知识管理的方法?

企业内部知识管理是一个重要的任务&#xff0c;它涵盖了许多领域&#xff0c;包括知识生成、知识共享、知识保护等。在现代企业中&#xff0c;知识管理被认为是一项战略性的任务&#xff0c;可以为企业带来许多好处&#xff0c;例如提高员工生产力、减少错误和失误、加强员工的…

java原生LinkedList详解

java原生LinkedList详解 实际上在IDEA,JDK环境下的LinkList底层就是一个双向链表&#xff0c;由于链表没有将元素存储在连续的空间中&#xff0c;元素存储在单独的节点中&#xff0c;然后通过引用将节点连接起来了&#xff0c;因此在在任意位置插入或者删除元素时&#xff0c;…

vue不同开发方式引用vue文件讲解

上面这个图是vue构建后dist目录的文件&#xff0c;这里面包含了各种开发环境所需要的vue文件 一、开发环境和生产环境 主要分为带有prod和不带prod的版本&#xff1b; 带有prod为生产环境版本并进行了代码压缩&#xff0c;没有运行中不会有警告、错误等详细的提示信息 不带pr…