Mishka has got n empty boxes. For every i (1 ≤ i ≤ n), i-th box is a cube with side length ai.
Mishka can put a box i into another box j if the following conditions are met:
- i-th box is not put into another box;
- j-th box doesn't contain any other boxes;
- box i is smaller than box j (ai < aj).
Mishka can put boxes into each other an arbitrary number of times. He wants to minimize the number of visible boxes. A box is called visible iff it is not put into some another box.
Help Mishka to determine the minimum possible number of visible boxes!
The first line contains one integer n (1 ≤ n ≤ 5000) — the number of boxes Mishka has got.
The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109), where ai is the side length of i-th box.
Print the minimum possible number of visible boxes.
3 1 2 3
1
4 4 2 4 3
2
In the first example it is possible to put box 1 into box 2, and 2 into 3.
In the second example Mishka can put box 2 into box 3, and box 4 into box 1.
题意:给定n个箱子 大的箱子可以装小的箱子。问最后最少有几个箱子。
题解: 这道题运用贪心的思想,我们从大到小开始装箱子,每个箱子尽可能多的装下其他箱子,装过的箱子不会再用到 标记一下就可以了。
import java.util.Arrays;
import java.util.Scanner;
public class TaskA {
static int[] vis;
@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
int[] arr = new int[n];
vis = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
int boxCount = boxCount(arr);
System.out.println(boxCount);
}
}
public static int boxCount(int[] arr) {
int flag = 0;
Arrays.sort(arr);
for (int i = arr.length - 1; i >= 0; i--) {
if (vis[i] == -1) {
continue;
}
int Llint = i;
int Rlint = i - 1;
while (Rlint >= 0) {
if (arr[Llint] > arr[Rlint] && vis[Rlint] != -1) {
vis[Rlint] = -1;
Llint = Rlint;
}
Rlint--;
}
flag++;
}
return flag;
}
}