问题:给定一个已排序好的序列,求出每个数出现的次数。
Example:
Input:1,2,2,3,4,2
Output:
1(1)
2(3)
4(1)
方法一:BitMap方法
BitMap方法的局限性在于:由于申请的数组长度限制,数的大小有限制。具体数组的长度由机器位数决定。具体请自行查阅。
优点:可以是无序的序列。
package hbq;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.next();
String[] numberStr = input.split(",");
int[] a = new int[numberStr.length];
for (int i = 0; i < a.length; i++) {
a[i] = Integer.valueOf(numberStr[i]);
}
int[] result = Solution(a);
for (int i = 0; i < result.length; i++) {
if (result[i] != 0) {
System.out.println("" + i + '(' + result[i] + ')');
}
}
sc.close();
}
public static int[] Solution(int[] a) {
int length = a.length;
int[] bitMap = new int[9999999];
for (int i = 0; i < length; i++) {
bitMap[i] = 0;
}
for (int i = 0; i < length; i++) {
bitMap[a[i]] += 1;
}
return bitMap;
}
}
方法二:
如果是排序好的数组可以采用以下方法,如果未排序,排序后再用这种方法也是极好的。
public static void Solution2(int[] a) {
int flag = 1;
for (int i = 0; i < a.length; i++) {
if (i == a.length - 1) {
System.out.println("" + a[i] + "(" + flag + ")");
break;
}
if (a[i] == a[i + 1]) {
flag++;
continue;
}
System.out.println("" + a[i] + "(" + flag + ")");
flag = 1;
}
}