Nous avons une collection de Comparable
s tenue dans un sac et doit trouver le k
ème élément le plus grand. J'ai copié la collection sur un HashSet
pour supprimer les doublons, puis j'ai converti le HashSet
en un tableau à trier et par conséquent l'k
ème élément accédé. Le code compile, mais échoue le test, et je ne peux pas comprendre ce qui ne va pas. Des idées?trouver kth plus grand élément dans un sac mis en œuvre par matrice
public E kth(int k) {
uniqueSet();
Object[] uniqueArr = hashSet.toArray();
startQuick(uniqueArr);
return (E) uniqueArr[k - 1];
}
private void startQuick(Object[] uniqueArr) {
int i = 0, j = uniqueArr.length;
quickSort(uniqueArr, 0, j);
}
private void quickSort(Object[] uniqueArr, int i, int j) {
int index = partition(uniqueArr, i, j);
if (i < index - 1) {
quickSort(rankBagArr, index - 1, j);
}
if (index < j) {
quickSort(rankBagArr, i, index - 1);
}
}
private int partition(Object[] uniqueArr, int i, int j) {
E tmp;
E pivot = (E) rankBagArr[(i + j)/2];
while (i <= j) {
while (rankBagArr[i].compareTo(pivot) < 0) {
i++;
}
while (rankBagArr[j].compareTo(pivot) > 0) {
j--;
}
if (i <= j) {
tmp = (E) rankBagArr[i];
rankBagArr[i] = rankBagArr[j];
rankBagArr[j] = tmp;
i++;
j--;
}
}
return i;
}
Qu'est-ce que rankBagArr? Est-ce une faute de frappe et devrait-il être uniqueArr? –