• 编程题2


    题目描述:

    实现对一组无序的的字母进行从小到大排序(区分大小写),当两个字母相同时,小写字母排在大写字母前。要求时间复杂度为O(n)

    思路:字母为26个,当区分大小写后,变为26X2=52个,所以,首先申请一个长度为52的int型数组,按照aAbBcC….zZ(小写字母保存在下标为偶数的位置,大写字母保存在下标为奇数的位置)的顺序依次记录各个字母出现的 次数,当记录完成以后,就可以遍历这个数组来按照各个字母出现的次数来重组排序后的数组

    java版代码实现:

    /**
     * 字母排序
     * 问题描述:实现对一组无序的字母进行从小到大排序(区分大小写),当两个字母相同时,
     * 小写字母放到大写字母之前。要求时间复杂度为O(n)
     * @author wyl
     *
     */
    public class CharacterSort {
        /**
         * 声明一个长度为52的数组,代表52个字母,用来存放每个字母出现的个数
         */
        public static void charSort(char[] arr){
            if(arr == null){ //数组为空
                System.out.println("输入参数不合法");
                return;
            }
            int[] chars = new int[52]; //声明长度为52的数组,代表52个字母,用来保存字母出现的次数
            //数组的偶数位存放小写字母出现的次数,奇数位存放大写字母出现的次数
            for(int i=0;i<arr.length;i++){
                if(arr[i]>='a' && arr[i]<='z'){
                    //出现小写字母,存放在偶数位
                    chars[(arr[i]-'a')*2]++;
                }else if(arr[i]>='A' && arr[i]<='Z'){
                    //出现大写字母,存放在奇数位
                    chars[(arr[i]-'A')*2 + 1]++;
                }
            }
            //根据chars数组中的个数,改变arr中字母的顺序
            int index = 0;
            for(int i=0;i<chars.length;i++){
                if(chars[i]>0){//个数大于0 
                    if(i%2 == 0){//偶数位,为小写字母
                        for(int j=0;j<chars[i];j++){ //个数是多少就打印多少次
                            arr[index++] = (char) ('a'+ i/2);
                        }
                    }else{
                        for(int j=0;j<chars[i];j++){ //个数是多少就打印多少次
                            arr[index++] = (char) ('A'+ (i-1)/2);
                        }
                    }
                }
            }
        }
        
        public static void main(String[] args) {
            char[] chars = {'A','a','C','F','d','B','c','C'};
            charSort(chars);
            for(int i=0;i<chars.length;i++){
                System.out.print(chars[i]+" ");
            }
        }
    }
  • 相关阅读:
    上传文件事件并校验:event.target.files && event.target.files[0]
    深浅拷贝
    Git学习
    Flex弹性布局
    hive
    222
    错误总结
    Redis小结2
    spark小结
    kafka详解
  • 原文地址:https://www.cnblogs.com/daleyzou/p/9134935.html
Copyright © 2020-2023  润新知