C#统计数组连续重复最高频次数字 如何扩展获取第二高频次数字
C# 数组连续重复数值统计修改方案
实现思路
原代码仅记录了单次最高连续次数的数值,无法处理并列最高、输出次高的需求,我们调整逻辑如下:
- 先遍历数组,记录所有连续段的数值和对应连续次数
- 修复原代码未统计数组末尾连续段的潜在bug
- 将所有连续段按连续次数降序排序,可灵活输出前N名或所有并列最高的条目
修改后完整代码
using System; using System.Collections.Generic; using System.Linq; namespace 2258864 { class Program { static void MostRepeatedInARow(int[] array) { if (array == null || array.Length == 0) { Console.WriteLine("数组为空"); return; } // 存储所有连续段的数值和连续次数 List<(int Number, int Streak)> streaks = new List<(int, int)>(); int count = 1; for (int i = 1; i < array.Length; i++) { if (array[i] == array[i - 1]) { count++; } else { streaks.Add((array[i - 1], count)); count = 1; } } // 补充统计最后一段连续序列 streaks.Add((array[array.Length - 1], count)); // 按连续次数降序排序 var sortedStreaks = streaks.OrderByDescending(s => s.Streak).ToList(); // 输出最高连续次数的所有数值 int maxStreak = sortedStreaks.First().Streak; Console.WriteLine($"连续重复次数最高({maxStreak}次)的数字:"); foreach (var item in sortedStreaks.Where(s => s.Streak == maxStreak)) { Console.WriteLine($"- 数字 {item.Number}"); } // 输出第二高连续次数的所有数值 var secondStreakGroup = sortedStreaks.Where(s => s.Streak < maxStreak).ToList(); if (secondStreakGroup.Any()) { int secondMaxStreak = secondStreakGroup.First().Streak; Console.WriteLine($"\n连续重复次数第二高({secondMaxStreak}次)的数字:"); foreach (var item in secondStreakGroup.Where(s => s.Streak == secondMaxStreak)) { Console.WriteLine($"- 数字 {item.Number}"); } } } static void Main() { int[] ListofNumbers = { 4, 2, 6, 6, 6, 6, 5, 5, 5, 4, 3, 5, 3, 3, 3, 3, 2 }; MostRepeatedInARow(ListofNumbers); } } }
运行效果
针对示例数组,输出结果为:
连续重复次数最高(4次)的数字: - 数字 6 - 数字 3 连续重复次数第二高(3次)的数字: - 数字 5
内容的提问来源于stack exchange,提问作者dean ambrose
相关产品推荐
相关产品推荐

