百练之垂直直方图
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我真是非常不能理解
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我真是非常不能理解
相关文章推荐
- 04-垂直直方图
- POJ NOI0113-04 垂直直方图(Bailian2800)
- 打印输入中单词长度的直方图(垂直方向)
- 百练OJ:2800:垂直直方图
- 打印输入中单词长度的直方图(垂直打印)
- 1802 垂直直方图
- 04:垂直直方图
- C语言打印直方图(垂直方向)
- 倒计时四天——04:垂直直方图
- 04:垂直直方图
- 第7周 C语言程序设计(新2版) 练习1-13 打印输入单词长度的直方图(水平与垂直)
- Poj 2136 Vertical Histogram(打印垂直直方图)
- 对输入单词长度输出垂直直方图
- Python:使用pycha快速绘制办公常用图(饼图、垂直直方图、水平直方图、散点图等七种图形)
- POJ 2800 垂直直方图 解题报告
- 单词长度的垂直直方图
- Poj 2136 Vertical Histogram(打印垂直直方图)
- 04-垂直直方图
- 练习系统 实验一 垂直直方图
- Python:使用pycha快速绘制办公常用图(饼图、垂直直方图、水平直方图、散点图等七种图形)