首页 > 其他分享 >数组的度

数组的度

时间:2024-01-31 23:14:59浏览次数:23  
标签:HashMap 示例 int nums 数组 new

697. Degree of an Array (Easy)

给定一个非空且只包含非负数的整数数组 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]
最短连续子数组[2, 2]的长度为2,所以返回2.

示例 2:

输入: [1,2,2,3,1,4,2]
输出: 6

注意:

  • nums.length 在1到50,000区间范围内。
  • nums[i] 是一个在0到49,999范围内的整数。
public int findShortestSubArray(int[] nums) {
	//统计 nums 中数字出现的次数
	HashMap<Integer,Integer> freq = new HashMap<>();
	// <num,num在数组中的结尾下标>
	HashMap<Integer,Integer> numLastIndex = new HashMap<>();
	// <num,num在数组中的起始下标>
	HashMap<Integer,Integer> numFirstIndex = new HashMap<>();

	for(int i=0;i<nums.length;i++){
		int num =  nums[i];
		freq.put(num,freq.getOrDefault(num,0)+1);
		numLastIndex.put(num,i);
		if(!numFirstIndex.containsKey(num)){
			//判断是否已经存在 num,如果已经存在,就不能覆盖,因为这是该元素在数组中的起始下标
			numFirstIndex.put(num,i);
		}
	}

	//获取该数组的度
	int degree = 0;
	for(int num : nums){
		degree = Math.max(degree,freq.get(num));
	}

	int res = Integer.MAX_VALUE;
	//要保证最短,则该连续子数组值需从 num 的开始位置和结束位置截取
	for(int num : nums){
		if(freq.get(num) < degree){
			continue;
		}
		res = Math.min(res,numLastIndex.get(num)-numFirstIndex.get(num)+1);
	}
	return res;
}

参考:

标签:HashMap,示例,int,nums,数组,new
From: https://www.cnblogs.com/i9code/p/18000319

相关文章

  • 嵌套数组
    565.ArrayNesting(Medium)Input:A=[5,4,0,3,1,6,2]Output:4Explanation:A[0]=5,A[1]=4,A[2]=0,A[3]=3,A[4]=1,A[5]=6,A[6]=2.OneofthelongestS[K]:S[0]={A[0],A[5],A[6],A[2]}={5,6,2,0}题目描述:S[i]表示一个集合,集合的第一个......
  • 后缀数组好题选讲
    CodeForces616FExpensiveStringshttps://codeforces.com/problemset/problem/616/FProblemtagsstringsuffixstructuresstrings*2700ProblemStatement给定\(n\)个字符串\(t_1,t_2,\dots,t_n\)。每个字符串有一个权值,对于\(1\leqi\leqn\),有\(t_i\)的权......
  • Java 数组
    数组数组是相同类型数据的有序集合。数组的声明和创建publicclassDemo01{//变量的类型变量的名字=变量的值//数组类型publicstaticvoidmain(String[]args){//首先声明数组变量int[]nums;//定义,首选这种intnums2[]......
  • const copyStories = [...stories] 和 let storiesToDisplay = stories.slice(); 两
    constcopyStories=[...stories]和letstoriesToDisplay=stories.slice();两种复制数组的方式,哪种更优雅?在JavaScript中,constcopyStories=[...stories](使用扩展运算符)和letstoriesToDisplay=stories.slice()都可以用来复制数组,并且都能生成一个新的数组。这两种......
  • golang 使用hex包,转换文件的16进制字符、16进制字节数组
    某些特殊情况下需要根据文件的16进制转换成字符在linux系统用vim保存一个文件,写入两行内容这是测试A这是测试B用linux的xxd命令输出文件的16进制字节数组xxd-g1-it.txtunsignedchart_txt[]={0xe8,0xbf,0x99,0xe6,0x98,0xaf,0xe6,0xb5,0x8b,0x......
  • 鸿蒙二进制数组创建
    背景c++层数据都是二进制,需要转换成arrayBuffer透传到ets层给业务使用,但是鸿蒙的使用下面两个api创建出来的二进制数组数据都是错误的。接口napi_create_arraybuffer:这个接口只能创建空的二进制数组,没办法把char的内容丢进去创建napi_create_external_arraybuffer:这个接口支持......
  • el-form的对象数组数组校验
    el-form绑定的是一个对象,但在有些时候提交的表单中会有数组数据,校验有点不符合常理例如这样的一个表单,付款方是个数组,这种怎么校验呢。上代码用的循环el-form,:model绑定循环的item,也就是数组中的单个对象,然后prop绑定参数,rules正常写,然后提交的时候,因为el-form是循环的,所......
  • js中对数组的unshift是什么操作,为什么使用unshift进行命名?
    在JavaScript中,unshift()是数组对象的一个原生方法,它用于向数组的开头添加一个或多个元素,并将原有的数组元素依次向后移动。这个方法会改变原始数组本身,同时返回新的数组长度。在英语中,“unshift”不是一个标准的单词,但我们可以将其拆解为“un-”和“shift”。其中:“un-”是......
  • useState返回的为什么是数组而不是对象?
    首先,const[count,setCount]=useState(0)这种语法是ES6的解构赋值语法。数组在解构赋值时,按照返回的顺序一一解构,并且可以重新命名:constfoo=[1,2,3]const[a,b,c]=foo//a=1,b=2,c=3而对象在解构赋值时,必须和useState函数内部返回的对象的key同名:constfood={......
  • 数组中重复的数据
    给定一个整数数组a,其中1≤a[i]≤n(n为数组长度),其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]publicList<Integer>findDuplicates(int[]......