您的位置:首页 > 其它

百练之垂直直方图

2017-08-03 11:47 218 查看
刚开始是用集合的方法实现,理论上来说是没什么问题的,测试用例通过了,但是提交的时候RE,无论怎样也算是复习知识点所以还是记录一下

package poj_online;

import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class Hist {
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
Map<Character,Integer> tm=new TreeMap<Character,Integer>();
Character c;
for(int i=0;i<4;i++){
String str=scan.nextLine();
for(int j=0;j<str.length();j++){
c=str.charAt(j);
if(c>='A'&&c<='Z'){
if(tm.get(c)==null)
tm.put(c,1);
else
tm.put(c, tm.get(c)+1);
}
}
}
int max=0;
int value=0;
Set<Map.Entry<Character, Integer>> me=tm.entrySet();
Iterator<Map.Entry<Character, Integer>> it=me.iterator();
while(it.hasNext()){
value=it.next().getValue();
if(value>max)
max=value;
}

Character [][]arr=new Character[max][26];
for(int j=0;j<26;j++){
for(int i=0;i<max;i++){
if(tm.get((char)(j+'A'))>i)
arr[i][j]='*';
else
arr[i][j]=' ';
}
}

for(int i=max-1;i>=0;i--){
for(int j=0;j<25;j++)
System.out.print(arr[i][j]+" ");
System.out.println(arr[i][25]);
}
for(int i=0;i<25;i++){
System.out.print((char)('A'+i)+" ");
}
System.out.println("Z");
}
}


RE之后反应过来没必要搞这么复杂,直接数组就行,就一个长度为26的数组代表26个英文字母,数组里存储的数就是每个字母出此案的次数,思路非常直接了
代码如下:

package poj_online;

import java.util.Scanner;

public class NewHist {
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
int []a=new int[26];
for(int i=0;i<4;i++){
String s=scan.nextLine();
for(int j=0;j<s.length();j++){
if(s.charAt(j)>='A'&&s.charAt(j)<='Z'){
a[s.charAt(j)-'A']++;
}
}
}

int max=0;
for(int i=0;i<26;i++){
if(a[i]>max)
max=a[i];
}

/*System.out.println(max);
System.out.println();
for(int i=0;i<26;i++)
System.out.print(a[i]+" ");*/
for(int i=max;i>=1;i--){
for(int j=0;j<26;j++){
if(i>a[j])
System.out.print(" ");
else
System.out.print("* ");
}
System.out.println();
}
for(char c='A';c<='Z';c++)
System.out.print(c+" ");
}

}


图片如下:相比于集合的方法,在内存和运行时间方面都没有明显变化,用数组之后反而增大了,只是代码长度明显小一些,所以对于为什么之前RE而之后EC我真是非常不能理解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百练 垂直直方图