有一个有序一维数组 a[]={1,1,1,2,3,3,3,4,5,6,6}
如何才能输出"重复元素:重复开始-结束"这种格式?
例如上面的应该输出为:
1:0-2
3:4-6
6:9-10
我有一个代码, 但是效率很不理想

解决方案 »

  1.   


    using System;
    using System.IO;
    using System.Collections.Generic;class Program
    {
        static void Main()
        {
            int[] arr = new int[]{1,1,1,2,3,3,3,4,5,6,6};        List<MyTag> lst = new List<MyTag>();        MyTag tag = new MyTag() { data = arr[0], len = 1, pos = 0 };
            for (int i = 1; i < arr.Length; i++)
            {
                if (tag.data == arr[i])
                {
                    tag.len++;
                }
                else
                {
                    if (tag.len > 1)
                    {
                        lst.Add(tag);
                    }                tag.data = arr[i];
                    tag.len = 1;
                    tag.pos = i;
                }
            }        if (tag.len > 1)
            {
                lst.Add(tag);
            }        foreach (var v in lst)
            {
                Console.WriteLine("{0}:{1}-{2}", v.data, v.pos, v.pos + v.len - 1);
            }
        }
    }struct MyTag
    {
        public int data;
        public int pos;
        public int len;
    }
      

  2.   


    更新一下        for (int i = 1; i < arr.Length; i++)
            {
                if (tag.data == arr[i])
                {
                    tag.len++;
                }
                else
                {
                    //if (tag.len > 1)
                    //{
                        lst.Add(tag);
                    //}                tag.data = arr[i];
                    tag.len = 1;
                    tag.pos = i;
                }
            }
      

  3.   

    还差一点,最后的也要去掉 len>1的判断
    来个完整的吧using System;
    using System.IO;
    using System.Collections.Generic;class Program
    {
        static void Main()
        {
            int[] arr = new int[]{1,1,1,2,3,3,3,4,5,6,6};        List<MyTag> lst = new List<MyTag>();        MyTag tag = new MyTag() { data = arr[0], len = 1, pos = 0 };
            for (int i = 1; i < arr.Length; i++)
            {
                if (tag.data == arr[i])
                {
                    tag.len++;
                }
                else
                {
                    //if (tag.len > 1)
                    //{
                        lst.Add(tag);
                    //}                tag.data = arr[i];
                    tag.len = 1;
                    tag.pos = i;
                }
            }        //if (tag.len > 1)
            //{
                lst.Add(tag);
            //}        foreach (var v in lst)
            {
                Console.WriteLine("{0}:{1}-{2}", v.data, v.pos, v.pos + v.len - 1);
            }
        }}struct MyTag
    {
        public int data;
        public int pos;
        public int len;
    }