Ce este jumătatea unui array și cum o determinăm?
sobes.tech AI
Răspuns de la AI
Pe jumatatea unui array (sau "mediana" array-ului, dacă acesta este sortat) este elementul care, dacă array-ul este sortat, îl împarte în două părți: elemente mai mici sau egale cu mediană și elemente mai mari sau egale cu mediană. Dacă numărul de elemente este par, mediana este adesea calculată ca media aritmetică a celor două elemente centrale. În contextul "jumătății array-ului" în întrebările de interviu, se poate face referire și la căutarea unui element majoritar, care apare de mai mult de N/2 ori, unde N este numărul total de elemente din array.
Definiția jumătății array-ului depinde de context:
-
Mediana (pentru un array sortat sau la căutarea celui de-al k-lea cel mai mic element):
- Sortăm array-ul.
- Dacă dimensiunea
Neste impară, mediana este elementul de la indexulN/2. - Dacă dimensiunea
Neste pară, mediana este media aritmetică a elementelor de la indiciiN/2 - 1șiN/2.
-
Elementul majoritar (care apare de mai mult de N/2 ori):
- Folosim algoritmul de votare Boyer (algoritmul de vot majoritar Boyer–Moore).
- Creăm o variabilă
candidateșicount. - Parcurgem elementele array-ului. Dacă elementul curent este egal cu
candidate, creștemcount. Dacă nu, șicount> 0, scădemcount. Dacăcountdevine 0, elementul curent devine noulcandidate, iarcountse setează la 1. - După prima trecere,
candidateeste un potențial element majoritar. Pentru a fi sigur, se face o a doua trecere pentru a confirma dacă acesta apare cu adevărat mai mult de N/2 ori.
Exemplu de determinare a medianei (în Swift):
// Sortare pentru găsirea medianei
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
}
}
Exemplu de determinare a elementului majoritar (în Swift):
// Algoritmul de votare Boyer
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
}
}
// Verificare dacă candidate-ul este cu adevărat elementul majoritar
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 // Nu există element majoritar
}
Este important să clarificați cu intervievatorul ce tip exact de "jumătate a array-ului" se are în vedere în contextul problemei.