Czym jest połowa tablicy i jak ją określić?
sobes.tech AI
Odpowiedź od AI
Połowa tablicy (lub "mediana" tablicy, jeśli jest posortowana) to element, który, jeśli tablica jest posortowana, dzieli ją na dwie części: elementy mniejsze lub równe medianie i elementy większe lub równe medianie. Jeśli liczba elementów jest parzysta, mediana jest często średnią arytmetyczną dwóch środkowych elementów. W kontekście "połowy tablicy" w zadaniach rekrutacyjnych może również chodzić o poszukiwanie elementu większościowego, który występuje więcej niż N/2 razy, gdzie N to liczba elementów w tablicy.
Definicja połowy tablicy zależy od kontekstu:
-
Mediana (dla posortowanej tablicy lub podczas wyszukiwania k-tego najmniejszego elementu):
- Sortujemy tablicę.
- Jeśli rozmiar
Njest nieparzysty, mediana to element na indeksieN/2. - Jeśli rozmiar
Njest parzysty, mediana to średnia arytmetyczna elementów na indeksachN/2 - 1iN/2.
-
Element większościowy (który występuje > N/2 razy):
- Używamy algorytmu głosowania Boyera (algorytmu głosowania większościowego Boyer–Moore).
- Tworzymy zmienną
candidateicount. - Przechodzimy przez elementy tablicy. Jeśli bieżący element jest równy
candidate, zwiększamycount. Jeśli nie, icount> 0, zmniejszamycount. Jeślicount= 0, bieżący element staje się nowymcandidate, acountustawiamy na 1. - Po pierwszym przejściu
candidatejest potencjalnym elementem większościowym. Aby to potwierdzić, wykonujemy drugie przejście, aby upewnić się, że rzeczywiście występuje on więcej niż N/2 razy.
Przykład wyznaczania mediany (w Swift):
// Sortowanie w celu znalezienia mediany
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
}
}
Przykład wyznaczania elementu większościowego (w Swift):
// Algorytm głosowania Boyera
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
}
}
// Sprawdzenie, czy kandydat jest rzeczywiście elementem większościowym
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 // Brak elementu większościowego
}
Ważne jest, aby wyjaśnić z osobą przeprowadzającą rozmowę, jaki dokładnie typ "połowy tablicy" ma na myśli w kontekście zadania.