1 /// <summary>
2 /// Solution
3 /// 100/100
4 /// </summary>
5 /// <param name="A"></param>
6 /// <returns></returns>
7 public static int solution(int[] A)
8 {
9 int result = 0;
10 int max = 0;
11 int leader = 0;
12 int leftLeader = 0;
13 int rightLeader = 0;
14
15 int[] arrLeftLeader = new int[A.Length];
16 int[] arrRightLeader = new int[A.Length];
17 Dictionary<int, int> dic = new Dictionary<int, int>();
18
19 for (int i = 0; i < A.Length; i++)
20 {
21 if (!dic.ContainsKey(A[i]))
22 dic.Add(A[i], 1);
23 else
24 dic[A[i]]++;
25
26 if (dic[A[i]] > max)
27 {
28 max = dic[A[i]];
29 leader = A[i];
30 }
31 if (max > (i + 1) / 2)
32 arrLeftLeader[i] = leader;
33 else
34 arrLeftLeader[i] = -1;
35 }
36
37 max = 0;
38 dic.Clear();
39
40 for (int i = A.Length - 1; i >= 0; i--)
41 {
42 if (!dic.ContainsKey(A[i]))
43 dic.Add(A[i], 1);
44 else
45 dic[A[i]]++;
46
47 if (dic[A[i]] > max)
48 {
49 max = dic[A[i]];
50 leader = A[i];
51 }
52 if (max > (A.Length - i) / 2)
53 arrRightLeader[i] = leader;
54 else
55 arrRightLeader[i] = -1;
56 }
57
58 for (int i = 0; i < A.Length - 1; i++)
59 {
60 leftLeader = arrLeftLeader[i];
61 rightLeader = arrRightLeader[i + 1];
62 if (leftLeader != -1 && rightLeader != -1 && leftLeader == rightLeader)
63 result++;
64 }
65
66 return result;
67 }