首页 > 其他分享 >数组的度与子数组长度

数组的度与子数组长度

时间:2024-03-24 21:12:58浏览次数:24  
标签:arr Dictionary int freQue num frequency 数组 长度

public static int degreeOfArray(List<int> arr)
{
int count = arr.Count;
int[] freQue = new int[count];
//Dictionary<int,int> freQue=new Dictionary<int , int> ();
for (int i = 0; i < count; i++)
{
//freQue.Add(i, 0);
freQue[i] = 0;
for (int j = 0; j < count; j++)
{
if ( arr[i] == arr[j])

{
freQue[i]++;
}
}
}
int max = 0;
int index = 0;
//foreach(int m in freQue)
for (int k = 0; k < freQue.Count(); k++)
{
if (freQue[k] > max)
{
max = freQue[k];
index = k;
}
}
int rightIndex = 0;
for (int x = count - 1; x >= 0; x--)
{
if (arr[x] == arr[index])
{
rightIndex = x;
}
}
return rightIndex - index + 1;

}

 

 

Dictionary<int, int> frequency = new Dictionary<int, int>(); // 记录每个元素的出现次数 
Dictionary<int, int> firstIndex = new Dictionary<int, int>(); // 记录每个元素第一次出现的索引
Dictionary<int, int> lastIndex = new Dictionary<int, int>(); // 记录每个元素最后一次出现的索引
int maxFrequency = 0; // 最大出现次数
foreach (int num in nums)
{ if (!firstIndex.ContainsKey(num)) firstIndex[num] = Array.IndexOf(nums, num); // 记录第一次出现的索引
lastIndex[num] = Array.LastIndexOf(nums, num); // 记录最后一次出现的索引
frequency[num] = frequency.ContainsKey(num) ? frequency[num] + 1 : 1; // 更新出现次数
maxFrequency = Math.Max(maxFrequency, frequency[num]); // 更新最大出现次数
}
int minLength = nums.Length; // 最短子数组长度
foreach (var pair in frequency)
{
if (pair.Value == maxFrequency)
{ minLength = Math.Min(minLength, lastIndex[pair.Key] - firstIndex[pair.Key] + 1); // 计算最短子数组长度
}
}
return minLength;
}
}
public class Program
{
public static void Main(string[] args)
{
int[] nums = { 1, 2, 2, 3, 1, 4, 2 };
ArrayDegree arrayDegree = new ArrayDegree();
int minLength = arrayDegree.FindShortestSubarrayLength(nums);
Console.WriteLine("数组的度数为:" + minLength);
}
}

  

标签:arr,Dictionary,int,freQue,num,frequency,数组,长度
From: https://www.cnblogs.com/Dongmy/p/18092823

相关文章

  • 试题 算法提高 长度统计
    资源限制内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题描述给出n个线段以及它们的左端点和右端点。我们要求得到这些线段覆盖部分的长度。如线段[1,2]和[2,3]覆盖了数轴上1到3这个部分,所以它们覆盖的长度就是2。输入格式......
  • 动态数组类及其模板
    先定义point类,再定义由point类的动态数组#include<iostream>#include<cassert>usingnamespacestd;classPoint{private:intx,y;public:Point():x(0),y(0){cout<<"PointDefaultConstructorcalled."<<endl;}Poin......
  • arguments 这种类数组如何遍历
    类数组对象所谓的类数组对象:拥有一个length属性和若干索引属性的对象举个例子:vararray=['name','age','sex'];vararrayLike={0:'name',1:'age',2:'sex',length:3}即便如此,为什么叫做类数组对象呢?那让我们从读写、获取长度、遍......
  • Go数组的扩容规则
    Go数组的扩容规则Go数组的扩容规则技术要点先是双倍扩容,然后是一定的比例扩容,逐渐向1.25进行靠近在目前的实现里面,在小于256的时候会进行double,在大于256的时候,会根据一定的生长因子进行扩容,但是总体来说还是会逐渐的靠近到1.25funcgrowslice(et*_type,olds......
  • 一个操作让数组处理速度快了5倍,到底是为什么
     概述:通过对数组进行排序,代码更好地利用了缓存,从而提高了程序的性能。这种现象通常被称为"缓存友好"(cache-friendly)或"空间局部性"(spatiallocality)今天做一个数组数据计算时,发现一个效率问题,给大家分享一下一个数组排序和不排序时同样的逻辑处理速度是不一样的。排序后速度......
  • 最长子字符串的长度(二)【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-最长子字符串的长度(二)给你一个字符串s,字符串s首尾相连成一个环形,请你在环中找出’l’、‘o’、‘x’字符都恰好出现了偶数次最长子字符串的长度。输入描述:输入是一串小写的字母组成的字符串。输出描述:输出是一个整数补充说明:1<=s.length<=5x10^5......
  • JAVA数组和内存
    目录数组的概述和静态初始化介绍定义数组的初始化静态初始化动态初始化区别索引数组遍历常见问题数组练习求最值交换数据打乱数据数组的内存图!两个数组指向同一个空间的内存图总结数组的概述和静态初始化介绍1、数组是一种容器,用来存放同种数据类型的......
  • Java零基础-数组
    哈喽,各位小伙伴们,你们好呀,我是喵手。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把......
  • Java零基础-数组:异常处理和错误处理
    哈喽,各位小伙伴们,你们好呀,我是喵手。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把......
  • 和为 K 的子数组 - LeetCode 热题 10
    大家好!我是曾续缘......