首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求数组分组算法!该如何解决

2013-06-19 
求数组分组算法!!!!求算法,一个数组包括1,2,3,4,5,6,7,8,9,80,86,47,203,405,411怎么求出两数的差值最小的

求数组分组算法!!!!
求算法,一个数组包括1,2,3,4,5,6,7,8,9,80,86,47,203,405,411

怎么求出两数的差值最小的一组。1,2,3,4,5,6,7,8,9

[解决办法]
首先需要排序,然后紧紧比较相邻的两个数,例如:

var arr = new int[]{1,2,3,4,5,6,7,8,9,80,86,47,203,405,411};
var sort_arr = arr.OrderBy(x => x).ToArray();
var dv = (from n in Enumerable.Range(0, arr.Length - 1)
            let minute = sort_arr[n + 1] - sort_arr[n]
            select minute).Min();
var result = from n in Enumerable.Range(0, arr.Length - 1)
                where sort_arr[n + 1] - sort_arr[n] == dv 
[解决办法]
 n>0 && sort_arr[n]-sort_arr[n-1]== dv 
                select sort_arr[n];

[解决办法]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {            
            bool stop = false;
            var data = (new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 80, 86, 47, 203, 405, 411 }).OrderBy(x => x);
            List<int> r = new List<int>();
            int min = data.Skip(1).First() - data.First();
            r.Add(data.First());
            foreach (var item in data.Take(data.Count() - 1).Zip(data.Skip(1), (x, y) => new { x, y }))
            {
                if (item.y - item.x == min && !stop)
                {
                    r.Add(item.y);
                }
                else
                {
                    stop = true;
                    if (item.y - item.x < min)


                    {
                        stop = false;
                        r.Clear();
                        min = item.y - item.x;
                        r.Add(item.x);
                        r.Add(item.y);
                    }
                }
            }
            Console.WriteLine(string.Join(", ", r.ToArray()));
        }
    }
}

热点排行