Программа имеет входной список парных разрядов, а вывод должен быть строкой, содержащей значения списка, сгруппированные по их значению. Значения списка будут сгруппированы, если они равны. Что-то вроде: вход 9,77,5,5,31 => выход 9 77 2 * 5 31Преобразование двойного списка в сгруппированную строку
Я создал алгоритм в C# (в Java я думаю, что это почти то же самое) для этого, но я не уверен, что его можно улучшить в отношении его скорости или перекоса кода, или если у него есть некоторые ошибки, которые я не мог видеть. Ниже приведен алгоритм, содержащий еще несколько примеров ввода, вывода.
List<double> input = new List<double> { 11, 32, 32, 43}; // output 11 2*32 43
//List<double> input = new List<double> { 11, 11, 43, 43 }; // output 2*11 2*43
//List<double> input = new List<double> { 10, 11, 12, 13, 14, 15, 16 }; // output 10 11 12 13 14 15 16
//List<double> input = new List<double> { 11, 11, 11, 11, 11 }; // output 5 * 11
//List<double> input = new List<double> { 11, 11, 32, 22, 22, 22, 4, 10, 10 }; // output 2*11 32 3*22 4 2*10
string listAsString = string.Empty;
double nextElem = double.MinValue;
for (int i = 0; i < input.Count; i++)
{
double currentElem = input[i];
if (i + 1 < input.Count)
{
nextElem = input[i + 1];
}
int equalCount = 0;
while (currentElem.Equals(nextElem) && i < input.Count)
{
equalCount++;
i++;
currentElem = nextElem;
if (i < input.Count)
{
nextElem = input[i];
}
}
if (equalCount < 2)
{
listAsString += currentElem + " ";
}
else
{
listAsString += equalCount + "*" + currentElem + " ";
i--;
}
}
Console.WriteLine(listAsString);
Пожалуйста, дайте мне знать, если вы заметили некоторые ошибки или видите некоторые улучшения, которые могут быть сделаны.
Также, если вы знаете другую реализацию этого требования, добавьте его, чтобы можно было сравнить сравнение результатов, скорости, качества кода между алгоритмами ... и найти лучший способ справиться с этим.
Для 1,3,1 выход 1 3 1 или 2 * 1 3? –
Это больше похоже на вопрос для codereview.se? –
Hi Antonín, для ввода 1 3 1 выход будет 1 3 1. Будут сгруппированы только последовательные равные числа. – Clock