求一算法

nurotron_zhj 2012-03-26 10:27:54
在一组数据中,寻找连续大于某个数的多个区间,并计算这些区间的宽度
...全文
103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
烟灰洒落键盘 2012-03-26
  • 打赏
  • 举报
回复
可以把数据组合成一个多维的数组,然后逐个和指定的值进行对比,最后得到值包含0,1的多维数组,计算多维数组中对角线值为0的区间段,和求字符最大子串的方法类似
threenewbee 2012-03-26
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int n = 30;
Random rnd = new Random();
int[] array = new int[] { n - 1 }.Union(Enumerable.Range(0, 150).Select(x => rnd.Next(100))).Union(new int[] { n - 1 }).ToArray();

var data = array.Select((x, i) => new { y = x, i });
var query = from x in data.Skip(1)
group x by (data.Where(y => y.y < n && y.i < x.i).Max(y => y.i)) into g
where g.Count() > 1
select new { len = g.Count() - 1, values = g.Select(y => y.y).Reverse().Skip(1).Reverse() };
Console.WriteLine("source:");
Console.WriteLine(string.Join(", ", array.Skip(1).Take(array.Length - 2)));
Console.WriteLine("result: (larger than {0})", n);
foreach (var item in query)
{
Console.WriteLine("length = {0}, items: {1}", item.len, string.Join(", ", item.values));
}
}
}
}


source:
16, 35, 45, 43, 73, 63, 64, 19, 91, 57, 2, 62, 56, 96, 69, 24, 84, 53, 34, 68, 1
3, 67, 85, 44, 21, 98, 50, 78, 93, 17, 87, 5, 82, 90, 9, 0, 89, 26, 47, 32, 8, 6
, 20, 97, 54, 94, 51, 49, 46, 4, 30, 77, 75, 14, 40, 76, 31, 74, 3, 72, 11, 66,
12, 27, 61, 95, 38, 1, 52, 28, 86, 7, 37, 39, 81, 71
result: (larger than 30)
length = 6, items: 35, 45, 43, 73, 63, 64
length = 2, items: 91, 57
length = 4, items: 62, 56, 96, 69
length = 4, items: 84, 53, 34, 68
length = 3, items: 67, 85, 44
length = 4, items: 98, 50, 78, 93
length = 1, items: 87
length = 2, items: 82, 90
length = 1, items: 89
length = 2, items: 47, 32
length = 6, items: 97, 54, 94, 51, 49, 46
length = 3, items: 30, 77, 75
length = 4, items: 40, 76, 31, 74
length = 1, items: 72
length = 1, items: 66
length = 3, items: 61, 95, 38
length = 1, items: 52
length = 1, items: 86
length = 4, items: 37, 39, 81, 71
Press any key to continue . . .
bdmh 2012-03-26
  • 打赏
  • 举报
回复
一趟遍历
深海之蓝 2012-03-26
  • 打赏
  • 举报
回复
感觉遍历一遍,加些判断就可以了吧
nurotron_zhj 2012-03-26
  • 打赏
  • 举报
回复
有没有可以能看懂的,简单点的C#代码可以参考哈

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧