首页 > 其他 > 详细

数组中所有重复次数大于等于minTimes的数字

时间:2014-04-20 10:26:35      阅读:408      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
class Program
{
    static void Main(string[] args)
    {
        int[] input = { 1, 1, 1, 2, 2, 5, 2, 4, 9, 9, 20 };
        IDuplicationFinder dup1 = new Duplication1();
        string str1 = dup1.FindDuplication(input, 3);
        Console.WriteLine(str1);
 
        IDuplicationFinder dup2 = new Duplication2();
        string str2 = dup2.FindDuplication(input, 3);
        Console.WriteLine(str2);
        Console.Read();
    }
}
class Duplication1 : IDuplicationFinder
{
    public string FindDuplication(int[] input, uint minTimes)
    {
        Dictionary<int, int> valuedic = new Dictionary<int, int>();
        #region 整个完全遍历
        //foreach (var v in input)
        //{
        //    var numtimes = input.Where(m => m == v).Count();
        //    if (numtimes >= minTimes && !valuedic.Keys.Contains(v))
        //        valuedic.Add(v, numtimes);
        //}
        #endregion
        #region linq group
        var groupnum = input.GroupBy(m => m);
        foreach (var g in groupnum)
        {
            if (g.Count() >= minTimes)
                valuedic.Add(g.Key, g.Count());
        }
        #endregion
        return GetValue(valuedic);
    }
    private static string GetValue(Dictionary<int, int> valuedic)
    {
        StringBuilder sb = new StringBuilder();
        foreach (var d in valuedic)
        {
            sb.AppendFormat("{0}出现了{1}次", d.Key, d.Value);
            sb.AppendLine();
        }
        return sb.ToString();
    }
 
}
class Duplication2 : IDuplicationFinder
{
    public string FindDuplication(int[] input, uint minTimes)
    {
        List<int> result = new List<int>();
        Array.Sort(input);
        if (minTimes == 1)//如果次数是1,就要把去重显示
        {
            if (input[0] == input[1])
                result.Add(input[1]);
            for (int i = 1; i < input.Length - 1; i++)
            {
                if (input[i] != input[i + 1])
                    result.Add(input[i + 1]);
            }
        }
        else
        {
            int count = 1;//排序后 前一个跟后一个对比,所以从1开始
            for (int i = 0; i < input.Length - 1; i++)
            {
                if (result.Count > 0 && result.Last() == input[i])
                    continue;
                if (input[i] == input[i + 1])
                {
                    count++;
                    if (count >= minTimes)
                    {
                        result.Add(input[i]);
                        count = 1;
                    }
                }
 
            }
        }
 
        return string.Join(",", result);
    }
}
interface IDuplicationFinder
{
    string FindDuplication(int[] input, uint minTimes);
}

  

数组中所有重复次数大于等于minTimes的数字,布布扣,bubuko.com

数组中所有重复次数大于等于minTimes的数字

原文:http://www.cnblogs.com/smailxiaobai/p/3675550.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!