Interview: Find the Number that repeats the most times in a row in an array of integers
This is another one of these not related to job functions questions that get asked.
The solution is simple:
public static int MaxRepeatInArray(int[] arr) { //Input checks if (arr == null || arr.Length < 1) { throw new DataException("Empty Array"); } int bestChoice = arr[0]; int bestCounter = 1; int currentChoice = arr[0]; int currentCounter = 1; for (int i = 0; i < arr.Length; ++i) { if (currentChoice == arr[i]) { currentCounter++; } else { if (currentCounter > bestCounter) { bestChoice = currentChoice; bestCounter = currentCounter; } currentChoice = arr[i]; currentCounter = 1; } } // Incase sequence is at end if (currentCounter > bestCounter) { bestChoice = currentChoice; bestCounter = currentCounter; } return bestChoice; }
It takes just one pass of the data O(n). The time could be shortened a little by seeing if the number of remaining items
if (currentCounter > bestCounter) { bestChoice = currentChoice; bestCounter = currentCounter; if (arr.Length - i < bestCounter) return bestChoice; }Which needs to be done when the choice changes and not on every pass.
Comments
Post a Comment