697. Degree of an Array
来源:互联网 发布:万达告别房地产 知乎 编辑:程序博客网 时间:2024/06/06 01:20
问题: 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: [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: [1,2,2,3,1,4,2]Output: 6
Note:
nums.length will be between 1 and 50,000.
nums[i] will be an integer between 0 and 49,999.
问题分析: 输入一个字符串,输出具有最多相同字符的子串的最短长度。
解题思路: 用哈希映射数据结构来解决问题,在键中存储数组元素,重新定义一个包含起始位置begin、长度length、与相同个数times的数据类型,用于值中。最后对值进行选取,先判断个数最多的值,其次再次数最多且相等的情况下,选择长度最短长度,即是所要的输出。
*class Solution { public int findShortestSubArray(int[] nums) { Map<Integer,Beginlength> map = new HashMap<Integer,Beginlength>(); int begin ; int length = 0; int times = 0; for(int i = 0; i < nums.length;i++){ if(!map.containsKey(nums[i])){ begin = i; length = 1; times = 1; } else{ begin = map.get(nums[i]).begin; times = ++ map.get(nums[i]).times; length = i - begin + 1; } map.put(nums[i], new Beginlength(begin,length,times)); //传递实例化对象 } int j = 0; int time = 0; for(Beginlength i:map.values()){ if(i.times > time){ time = i.times; j = i.length; } else if(i.times == time){ j =(j>i.length)?i.length:j; } } return j; }} class Beginlength{ int begin ; int length; int times; Beginlength(int begin, int length,int times){ this.begin = begin; this.length = length; this.times = times; } }
运行时间为49ms。
- 697. Degree of an Array
- 697. Degree of an Array
- 697. Degree of an Array
- 697. Degree of an Array
- 697. Degree of an Array
- LWC 54:697. Degree of an Array
- LeetCode 697. Degree of an Array
- leetcode-697. Degree of an Array
- 【LeetCode】697. Degree of an Array
- LeetCode-697. Degree of an Array
- 697 Degree of an Array
- leetCode-Degree of an Array
- leetcode 697. Degree of an Array数组的度
- Degree of an Array问题及解法
- LeetCode697. Degree of an Array解答
- LeetCode.697 Degree of an Array
- leetcode 697[easy]---Degree of an Array
- LeetCode-697:Degree of an Array (度相同的最小子数组)
- J
- maven安装 配置 与简单demo
- 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 数学课(Math)和平均值(avg),方法包括求
- 第3章任务1:判断学生成绩是否有效
- 输入学生人数和成绩并判断出最高分和总分
- 697. Degree of an Array
- C++实现多目标遗传算法(0/1背包问题)
- n++和++n堆栈问题
- 高德地图在网页开发中的简单使用
- Internet路由协议
- Oc FMDB+SQL语句
- 水平垂直居中的几种方法
- javaweb理论
- HDU