¿Qué es la mitad de un array y cómo se determina?
sobes.tech AI
Respuesta de la IA
La mitad de un array (o la "mediana" del array, si está ordenado) es el elemento que, si el array está ordenado, lo divide en dos partes: elementos menores o iguales a la mediana y elementos mayores o iguales a la mediana. Si el número de elementos es par, la mediana suele ser el promedio de los dos elementos centrales. En el contexto de "la mitad del array" en tareas de entrevistas, también puede referirse a la búsqueda de un elemento mayoritario, que aparece más de N/2 veces, donde N es el número de elementos en el array.
La definición de la mitad del array depende del contexto:
-
Mediana (para un array ordenado o al buscar el k-ésimo elemento más pequeño):
- Ordenamos el array.
- Si el tamaño
Nes impar, la mediana es el elemento en el índiceN/2. - Si el tamaño
Nes par, la mediana es el promedio de los elementos en los índicesN/2 - 1yN/2.
-
Elemento mayoritario (que aparece > N/2 veces):
- Usamos el algoritmo de votación de Boyer (algoritmo de voto mayoritario de Boyer–Moore).
- Creamos una variable
candidateycount. - Recorremos los elementos del array. Si el elemento actual es igual a
candidate, incrementamoscount. Si no, ycount> 0, decrementamoscount. Sicount= 0, el elemento actual se convierte en el nuevocandidate, ycountse establece en 1. - Después de la primera pasada,
candidatees un posible elemento mayoritario. Para garantizarlo, se realiza una segunda pasada para confirmar que realmente aparece más de N/2 veces.
Ejemplo de cómo determinar la mediana (en Swift):
// Ordenar para encontrar la mediana
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
}
}
Ejemplo de cómo determinar el elemento mayoritario (en Swift):
// Algoritmo de votación de 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
}
}
// Verificar si el candidato es realmente mayoritario
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 // No hay elemento mayoritario
}
Es importante aclarar con el entrevistador qué tipo exacto de "mitad del array" se tiene en mente en el contexto de la tarea.