一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序
文章目录
创新工场面试题目
一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。
此题网上看到别人的做法都说的比较迷糊,好多也都是用快排之类来做的,现在来说一下我的思路:可以将这些字符转为ascii
码,小写在前,大小在中间,数字在最后,正好是按ascii
倒着排过来,现在已经确认待排序的内容都是在ascii
的范围内,所以可以借鉴位排序的方法,申请一个128位的int数组,将每个字符映射到这个数组里面,多个出现在字符累加起来,如果没有出现则置0,最后按顺序输出即可,不需要任何比较。最终整个算法的复杂度为O(N)。
1 | char[] cs={'a','Q','7','b','9','P','a','c','8','O','Q','d','N','2','e','M'}; |
本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权kubiCode,并且,不得用于商业用途。如您有任何疑问或者授权方面的协商,请给我留言。