poj1007-java

来源:互联网 发布:数据库 生成 防伪码 编辑:程序博客网 时间:2024/05/20 11:49

poj1007

题目大意:

 序列“未排序程度”的一个计算方式是元素乱序的元素对个数。例如:在单词序列“DAABEC'”中,因为D大于右边四个单词,E大于C,所以计算结果为5。这种计算方法称为序列的逆序数。序列“AACEDGG”逆序数为1(E与D)——近似排序,而序列``ZWQM'' 逆序数为6(它是已排序序列的反序)。 你的任务是分类DNA字符串(只有ACGT四个字符)。但是你分类它们的方法不是字典序,而是逆序数,排序程度从好到差。 即逆序数从小到大,所有字符串长度相同。
import java.util.*;class DNA {    private String str = null;    private int sortNum = 0;    public DNA(String input){        str = input;        int num=0;        for(int i=0;i<str.length()-1;i++){            for(int j=i+1;j<str.length();j++){                if(str.charAt(i)>str.charAt(j)){                    num++;                }            }        }        sortNum = num;      }    public int getSortNum(){        return sortNum;    }    @Override    public String toString(){        return str;    }}class DNAComparator implements Comparator{    @Override    public int compare(Object o1, Object o2) {        DNA d1=(DNA)o1;        DNA d2=(DNA)o2;        if(d1.getSortNum() > d2.getSortNum()){            return 1;        }else if(d1.getSortNum() == d2.getSortNum()){            return 0;        }else{            return -1;        }    }}public class Main {    public static void main(String[] args) {        Scanner ss=new Scanner(System.in);        String[] t=ss.nextLine().split(" ");        int col=Integer.valueOf(t[0]).intValue();        int row=Integer.valueOf(t[1]).intValue();        List list=new ArrayList();        for(int i=0;i<row;i++){            DNA dna=new DNA(ss.nextLine());            list.add(dna.toString());        }        Collections.sort(list, new DNAComparator());        print(list);            }    private static void print(List list){        //使用Iterator遍历        Iterator iter = list.iterator();        while(iter.hasNext()){            System.out.println(iter.next());        }    }}

Collections.sort();
用法见:

0 0
原创粉丝点击