O que é metade de um array e como determiná-la?
sobes.tech IA
Resposta da IA
A metade de um array (ou a "mediana" do array, se estiver ordenado) é o elemento que, se o array estiver ordenado, o divide em duas partes: elementos menores ou iguais à mediana e elementos maiores ou iguais à mediana. Se o número de elementos for par, a mediana costuma ser a média aritmética dos dois elementos centrais. No contexto de "metade do array" em tarefas de entrevistas, também pode referir-se à procura de um elemento maioritário, que aparece mais de N/2 vezes, onde N é o número de elementos no array.
A definição de metade do array depende do contexto:
-
Mediana (para um array ordenado ou ao procurar o k-ésimo menor elemento):
- Ordenamos o array.
- Se o tamanho
Nfor ímpar, a mediana é o elemento no índiceN/2. - Se o tamanho
Nfor par, a mediana é a média aritmética dos elementos nos índicesN/2 - 1eN/2.
-
Elemento maioritário (que aparece > N/2 vezes):
- Usamos o algoritmo de votação de Boyer (algoritmo de voto maioritário de Boyer–Moore).
- Criamos uma variável
candidateecount. - Percorremos os elementos do array. Se o elemento atual for igual a
candidate, incrementamoscount. Caso contrário, ecount> 0, decrementamoscount. Secount= 0, o elemento atual torna-se o novocandidate, ecounté definido como 1. - Após a primeira passagem,
candidateé um possível elemento maioritário. Para garantir, fazemos uma segunda passagem para confirmar que ele realmente aparece mais de N/2 vezes.
Exemplo de como determinar a mediana (em Swift):
// Ordenar para encontrar a 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
}
}
Exemplo de como determinar o elemento maioritário (em Swift):
// Algoritmo de votação 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
}
}
// Verificação se o candidato é realmente maioritário
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 // Não há elemento maioritário
}
É importante esclarecer com o entrevistador qual o tipo exato de "metade do array" se pretende na questão.