Я должен был сделать это с помощью 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
Я должен был сделать это с помощью C#. Я использую технику скольжения окна, чтобы уменьшить сложность кода, но переменная max не обновляется правильно при скольжении окна. Я убедился, что в нем нет логических ошибок. [h4]Алгоритм[/h4] [code]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 [/code] [h4]Код, который я написал[/h4] [code]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);