又一道小题

题目:给出一系列DNA字母串(高中生物知识可知仅含ACTG四个字母),以逆序数作为评判标准,从好到坏排序。逆序数:在n个元素的任意排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。

方法:先求每个字符串的逆序数,再将字符串按逆序数排列。

代码抄自GitHub:

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int len = in.nextInt(), test = in.nextInt();
        String[] list = new String[test];
        for(int i=0;i<test;i++){
            list[i] = in.next();
        }
        Arrays.sort(list,new Comp());
        for(int i=0;i<list.length;i++){
            System.out.println(list[i]);
        }
    }

    private static class Comp implements Comparator<String> {

        public int compare(String o1, String o2) {
            Integer count1 = 0, count2 = 0;
            for (int i = 1; i < o1.length(); i++) {
                for(int j = i; j>0;j--){
                    if(o1.charAt(j)<o1.charAt(j-1)){
                        char temp = o1.charAt(j);
                        o1 = o1.substring(0,j-1)+o1.charAt(j)+o1.charAt(j-1)+o1.substring(j+1,o1.length());
                        count1++;
                    }
                    if(o2.charAt(j)<o2.charAt(j-1)){
                        char temp = o2.charAt(j);
                        o2 = o2.substring(0,j-1)+o2.charAt(j)+o2.charAt(j-1)+o2.substring(j+1,o2.length());
                        count2++;
                    }
                }
            }
            return count1.compareTo(count2);
        }

    }
}
时间: 2024-10-14 04:29:53

又一道小题的相关文章

一道小题:从一个数组里产生所有可能的乘积组合

比如给定一个数组[2,3,11] 要求产生[1,2,3,6,11,22,33,66] 观察可得:[2,3] 产生了[1,2,3,6] 的乘积可能.当加入11时,11会和现有的每一个元素都相乘得到[1,2,3,6,11,22,33,66] public static void allProducts(int[] arr) { List<Integer> list = new ArrayList<Integer>(); list.add(1); for(int i=0; i<ar

由一道小题谈谈JS的new操作符

今天碰到一个题,感觉还是有一定的迷惑性的.而这也正说明一点,有时候形成的惯性思维很要命,特别是遇到小的知识点的时候.不多说,先来看看这道题: 运行这段代码之后,"mike"的值是什么? function Person(name, age){ this.name = name; this.age = parseInt(age,10); } var mike = Person('mike', '25'); A. null B. 代码不能运行,语法有错误 C. { name: 'Mike',

一道小题

题目:计算13+23+33+--+(n-1)3+n3. 这个式子一般的解法,应当是用循环的方式:先算13,再算23,相加,再算33,相加--算出结果. 1 import java.util.Scanner; 2 3 public class CalculateCube { 4 public static long cube(int number) { 5 int retnum = 0; 6 for(int num =1; num<=number;num++) { 7 retnum += num*

前端笔试小题

/*一.变量作用域一道小题*/var x='a';function printX(){ console.log(x); var x='b'; console.log(x);}printX(); var y='c';function printY(){ console.log(y); y='d'; console.log(y);}printY();//输出结果undefined,b,c,d /*二.输出结果*///alert(null instanceof Object);//alert(null

一天一道算法题---6.26---二分查找

感谢微信平台---一天一道算法题----每天多一点进步-- 好累啊  现在在用win7自带的输入法 打起来真麻烦 快点把这2天的搞完就重装了 还是直接来源于----〉 待字闺中 分析 给定一个数组A,其中有一个位置被称为Magic Index,含义是:如果i是Magic Index,则A[i] = i.假设A中的元素递增有序.且不重复,请给出方法,找到这个Magic Index.更进一步,当A中允许有重复的元素,该怎么办呢? 没有重复元素的情况 一些同学在遇到这个题目的时候,往往会觉得比较简单.

一天一道算法题--6.25--无定义

感谢微信平台---一天一道算法题--每天多一点进步---- 其实今天我接下去补上的几题都来自---待字闺中 所以我就原封不动的将它的题目与分析搬过来了 原题 给定一个数组,我们可以找到两个不相交的.并且是连续的子数组A和B,A中的数字和为sum(A), B中的元素和为sum(B).找到这样的A和B,满足sum(A) - sum(B)的绝对值是最大的. 例如:[2, -1 -2, 1, -4, 2, 8]划分为A=[-1, -2, 1, -4], B=[2, 8], 最大的值为16 分析 如果没有

一天一道算法题---6.27---二分图

感谢微信平台---一天一道算法题---每天多一点进步--- Ah... last... 也很晚了 快2点半了 C罗也告别这届世界杯了  主要还是输给德国太多球了 美国也没赢 唉 还是来源于----> 待字闺中 原题 大家都知道facebook用户都是双向的好友,a是b的好友,那么b一定是a的好友,现在给定一个用户列表,其中有些用户是好友,有些不是,请判断,这些用户是否可以划分为两组,并且每组内的用户,互相都不是好友.如果能,请给出这个划分. 例子1: 用户:{1, 2, 3} 好友关系:1-2,

一天一道算法题---5.26---思维锻炼

感谢 微信平台: 一天一道算法题 -----  大家没事都可以去关注他 --- 不是做广告的---- 题目大意:  给你一个长度为n的整数序列A1,A2,--,An,找出两个整数Ai和Aj(i<j),使得Ai-Aj尽量大 反正 暴力肯定超时..... 数据大小 我也就给出了 反正 尽量用最好算法去解 就是了 嗯 它给的是o(n)的时间复杂度和空间度   但是很容易转换成o(1)空间度 o(n)时间复杂度的写法 这边给出个 与这题意相同的一个 题目  发现竟然是我以前WA的 怪不得 那么熟悉 ..

关于理解python类的小题

今天看了python部落翻译的一篇<一道python类的小题>文章,感觉挺有启发性,记录下来: 1 print('A') 2 class Person(object): 3 print('B') 4 def __int__(self,name): 5 print('C') 6 self.name = name 7 print('D') 8 print('E') 9 10 11 p1= Person('name1') 12 p2 = Person('name2') 输出结果: A B D E C