Как я могу решить это в o (n) или o (logn)?Как я могу изменить этот код, чтобы иметь временную сложность o (log n) или o (n) вместо o (n^2)
После уроков русские группы школьников вышли на улицу и решили посетить Поликарпус, чтобы отпраздновать свой день рождения. Мы знаем, что i-я группа состоит из друзей si (1 ≤ si ≤ 4), и они хотят пойти в Поликарпус вместе. Они решили добраться туда на такси. Каждый автомобиль может перевозить не более четырех пассажиров. Какое минимальное количество автомобилей понадобится детям, если все члены каждой группы будут ездить на одном такси (но одно такси может принимать более одной группы)? Ниже мой подход, но в о (п^2)
import java.util.*;
public class taxi {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int cars = 0;
int groups = sc.nextInt();
int[] a = new int[groups];
for (int i = 0; i < a.length; i++) {
a[i] = sc.nextInt();
}
Arrays.sort(a);
for (int i = a.length - 1; i > 0; i--) {
if (a[i] == 4) {
cars = cars + 1;
} else {
if (a[i] == 0) {
break;
} else {
int y = 4 - a[i];
for (int j = i - 1; j >= 0; j--) {
if (y - a[j] == 0) {
a[j] = 0;
break;
}
if (y - a[j] > 0) {
y = y - a[j];
a[j] = 0;
}
}
cars = cars + 1;
Arrays.sort(a);
}
}
}
if (a[0] != 0) {
cars++;
}
System.out.println(cars);
cars = 0;
}
}
}
Лучше подходит для [codereview.se]. –