Wat is de helft van een array en hoe bepaal je die?
sobes.tech AI
Antwoord van AI
De helft van een array (of de "mediaan" van de array, als deze gesorteerd is) is het element dat, als de array gesorteerd is, deze in twee delen deelt: elementen die kleiner of gelijk aan de mediaan zijn en elementen die groter of gelijk aan de mediaan zijn. Als het aantal elementen even is, wordt de mediaan vaak berekend als het rekenkundige gemiddelde van de twee centrale elementen. In de context van "de helft van de array" in sollicitatievragen kan ook worden verwezen naar het zoeken naar een meerderheids element dat meer dan N/2 keer voorkomt, waarbij N het aantal elementen in de array is.
De definitie van de helft van de array hangt af van de context:
-
Mediaan (voor een gesorteerde array of bij het zoeken naar het k-1e kleinste element):
- Sorteer de array.
- Als de grootte
Noneven is, is de mediaan het element op indexN/2. - Als de grootte
Neven is, is de mediaan het rekenkundige gemiddelde van de elementen op indicesN/2 - 1enN/2.
-
Meerderheids- element (dat meer dan N/2 keer voorkomt):
- Gebruik het Boyer-Moore meerderheidsstem algoritme.
- Maak een variabele
candidateencount. - Loop door de array. Als het huidige element gelijk is aan
candidate, verhoogcount. Anders, encount> 0, verlaagcount. Alscount= 0, wordt het huidige element de nieuwecandidate, en wordtcountop 1 gezet. - Na de eerste pass is
candidateeen potentiële meerderheids- element. Om zeker te zijn, voer je een tweede pass uit om te bevestigen dat het daadwerkelijk meer dan N/2 keer voorkomt.
Voorbeeld van het bepalen van de mediaan (in Swift):
// Sorteren om de mediaan te vinden
func findMedian(in array: [Int]) -> Double? {
guard !array.isEmpty else { return nil }
let sortedArray = array.sorted()
let n = sortedArray.count
if n % 2 == 1 {
return Double(sortedArray[n / 2])
} else {
return Double(sortedArray[n / 2 - 1] + sortedArray[n / 2]) / 2.0
}
}
Voorbeeld van het bepalen van het meerderheids- element (in Swift):
// Boyer-Moore meerderheidsstem algoritme
func findMajorityElement(in array: [Int]) -> Int? {
var candidate: Int? = nil
var count = 0
for element in array {
if count == 0 {
candidate = element
count = 1
} else if element == candidate {
count += 1
} else {
count -= 1
}
}
// Controleer of de kandidaat daadwerkelijk een meerderheids- element is
var realCount = 0
if let candidate = candidate {
for element in array {
if element == candidate {
realCount += 1
}
}
if realCount > array.count / 2 {
return candidate
}
}
return nil // Geen meerderheids- element
}
Het is belangrijk om met de interviewer te verduidelijken welk specifiek type "helft van de array" wordt bedoeld in de context van de taak.