using
System;
using
System.Collections.Generic;
class
GFG{
public
static
int
getMinValue(
int
[] numbers)
{
int
minValue = numbers[0];
for
(
int
i = 1; i < numbers.Length; i++)
{
if
(numbers[i] < minValue)
{
minValue = numbers[i];
}
}
return
minValue;
}
public
static
int
maxHammingDistance(
int
[] array)
{
int
n = array.Length;
int
[] repetitionsOnRotations =
new
int
[n - 1];
Dictionary<
int
,
List<
int
>> indexesOfElements =
new
Dictionary<
int
,
List<
int
>>();
for
(
int
i = 0; i < n; i++)
{
int
key = array[i];
List<
int
> indexes =
null
;
if
(indexesOfElements.ContainsKey(key))
{
indexes = indexesOfElements[key];
}
else
{
indexes =
new
List<
int
>();
}
indexes.Add(i);
if
(!indexesOfElements.ContainsKey(key))
indexesOfElements.Add(key, indexes);
}
foreach
(KeyValuePair<
int
,
List<
int
>> keys
in
indexesOfElements)
{
List<
int
> indexes = keys.Value;
for
(
int
i = 0; i < indexes.Count - 1; i++)
{
for
(
int
j = i + 1; j < indexes.Count; j++)
{
int
diff = indexes[i] - indexes[j];
if
(diff < 0)
{
repetitionsOnRotations[(-diff) - 1] += 1;
diff = n + diff;
}
repetitionsOnRotations += 1;
}
}
}
return
n - (getMinValue(repetitionsOnRotations));
}
public
static
void
Main(String[] args)
{
int
[] array = { 1, 4, 1 };
int
result1 = GFG.maxHammingDistance(array);
Console.WriteLine(result1);
int
[] array2 = { 2, 4, 8, 0 };
int
result2 = GFG.maxHammingDistance(array2);
Console.WriteLine(result2);
}
}