Почему значение max не обновляется должным образом?C#

Место общения программистов C#
Ответить
Anonymous
 Почему значение max не обновляется должным образом?

Сообщение Anonymous »

Я должен был сделать это с помощью C#.
Я использую технику скольжения окна, чтобы уменьшить сложность кода, но переменная max не обновляется правильно при скольжении окна. Я убедился, что в нем нет логических ошибок.

Алгоритм

Код: Выделить всё

Initialize currentMax = 0
Initialize max = 0
Initialize subArray as an empty HashSet

For each number in numbers (from index 0 to end):
If number is NOT in subArray:
Add number to subArray
Add number to max (sum of the current subarray)

If size of subArray equals subArrayMaxSize:
Log currentMax, max, and subArray (before removal)
currentMax = max if max > currentMax else currentMax
Remove the oldest element from subArray (i - subArray.Count + 1)
Subtract the removed element from max
Log currentMax, max, and subArray (after removal)

Return currentMax

Код, который я написал

Код: Выделить всё

int[] numbers = { 1, 5, 4, 2, 9, 9, 9 };
int subArrayMaxSize = 3;

int currentMax = 0, max = 0;
HashSet subArray = new HashSet();

for (int i = 0; i < numbers.Length; i++)
{
if (!subArray.Contains(numbers[i]))
{
subArray.Add(numbers[i]);
max += numbers[i];

if (subArray.Count == subArrayMaxSize)
{
LogValues(currentMax, max, subArray, true);

currentMax = Math.Max(currentMax, max);
subArray.Remove(numbers[i - subArray.Count + 1]);
max -= numbers[i - subArray.Count + 1];

LogValues(currentMax, max, subArray, false);
}
}
}
void LogValues(int currentMax, int max, HashSet subArray, bool isStart)
{
if (isStart) Console.WriteLine("======================================================");
Console.WriteLine($"CurrentMax: {currentMax}, Max: {max}, SubArray: {string.Join(",", subArray)}");
if (!isStart) Console.WriteLine("\n\n");
}

Вывод, который я получил

Изображение
Я пробовал отладку построчно, но ничего не получилось.

Подробнее здесь: https://stackoverflow.com/questions/792 ... d-properly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»