poj1007-java

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();
用法见:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值