字符串低位优先排序真的只能排序字符串相同的字符么?
最近在刷剑指Offer上的题时遇到一题:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
突然想到使用LSD算法,
1 package com.roysatm.niuke; 2 3 4 /** 5 * Created by roysatm on 2016/5/30. 6 */ 7 public class SolutionPrintMinNumber { 8 9 /** 10 * 采用LSD(低位优先排序)思想,可以说能把高位优先排序取代。 11 * 基本是O(n)时间复杂度完成,没有使用任何java集合框架 12 * 代码可能不是最优,特别是空间复杂度方面 13 */ 14 public String PrintMinNumber(int[] numbers) { 15 16 if (numbers == null || numbers.length == 0) { 17 return ""; 18 } 19 20 String[] str = new String[numbers.length]; 21 int w = 0; 22 //将int数组转成string数组 23 for (int i = 0; i < numbers.length; i++) { 24 str[i] = numbers[i] + ""; 25 } 26 //计算出str数组中长度最长的字符串长度 27 for (int i = 0; i < str.length; i++) { 28 if (str[i].length() > w) { 29 w = str[i].length(); 30 } 31 } 32 33 StringBuilder sb = new StringBuilder(); 34 35 String[] array = PrintMinNumber(str, w); 36 //将String数组转换成String字符串 37 for (int i = 0; i < array.length; i++) { 38 sb.append(array[i]); 39 } 40 return sb.toString(); 41 } 42 43 public String[] PrintMinNumber(String[] str, int w) { 44 45 /** 46 * 低位优先排序,主要看点是getCharAt(String s, int index)函数的变化 47 由于getCharAt(String s, int index)函数的改变,LSD可以排长度不同的字符串 48 * **/ 49 50 int R = 256; 51 int N = str.length; 52 String[] aux = new String[N]; 53 54 for (int i = w - 1; i >= 0; i--) { 55 56 int[] count = new int[R + 1]; 57 58 for (int j = 0; j < N; j++) { 59 count[getCharAt(str[j], i) + 1]++; 60 } 61 62 for (int j = 0; j < R; j++) { 63 count[j + 1] += count[j]; 64 } 65 66 for (int j = 0; j < N; j++) { 67 aux[count[getCharAt(str[j], i)]++] = str[j]; 68 } 69 70 for (int j = 0; j < N; j++) { 71 str[j] = aux[j]; 72 } 73 } 74 75 return str; 76 } 77 78 private char getCharAt(String s, int index) { 79 80 if (s.length() <= index) { 81 return s.charAt(s.length() - 1); 82 } else { 83 return s.charAt(index); 84 } 85 } 86 87 public static void main(String[] args) { 88 int[] a = {12, 2, 34, 13, 54}; 89 SolutionPrintMinNumber spm = new SolutionPrintMinNumber(); 90 String str = spm.PrintMinNumber(a); 91 System.out.print(str + " "); 92 93 } 94 }
以上算法是LSD排序算法升级版,不仅能排序字符串长度相同的数组,还能像高位优先一样排序字符串不同的数组。
下次有时间再详细写写.......
转载于:https://www.cnblogs.com/Roysatm/p/5615075.html
字符串低位优先排序真的只能排序字符串相同的字符么?相关推荐
- 字符串低位优先排序(LSD)和高位优先排序(MSD)原理及C++实现
前言: 最近正好在学习字符串相关的算法,写了下LSD.MSD以及三向快速排序算法,写完了过后有很大的感触,所以决定把这几天所学习的东西记录下来. 原理: 键索引计数法: 在开始介绍LS ...
- 算法-低位优先的字符串排序
低位优先的字符串排序相当于是对键索引计数方法的一个扩展,主要用于处理固定长度字符串,比如说手机号,固定电话,银行卡卡号,字符串的长度为N,从右向左开始进行每个键作为值开始遍历,实现比较简单: -(vo ...
- 字符串排序算法:低位优先排序(LSD)
LSD:低位优先的字符串排序,核心思想就是对字符串的每个字符做一次键索引排序 #include <iostream> #include <utility> #include & ...
- 空字符串计数、让字典可排序...Python冷知识(五)
本文转载自Python编程时光(ID: Python-Time) 冷知识系列,直至今日,已经更新至第五篇.前四篇给你准备好了,还没阅读的可以学习一下. 谈谈 Python 那些不为人知的冷知识(一) ...
- R语言使用str_order函数和str_sort函数对字符向量进行排序(str_order返回字符串排序的次序值(索引)、str_sort返回排序后的字符串)
R语言使用str_order函数和str_sort函数对字符向量进行排序(str_order返回字符串排序的次序值(索引).str_sort返回排序后的字符串) 目录
- php 字符串 字典序序排序,C++ 怎么实现字典序排序法,自然排序
C++ 如何实现字典序排序法,自然排序 类似PHP的natcasesort函数,整了一天没有头绪. 数组是vector 排序前: [0] => IMG0.png [1] => IMG3.p ...
- 计数排序的应用----排序字符串
加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 题目: 给你一个原始字符串,根据该字符串内每一个字符串出现的次数,按照ASCII码递增的排序重新调整输出. 举例: ...
- java字符串数组排序_在Java中对字符串数组进行排序
允许用户使用字符串数组.他们可以向数组添加字符串,从数组中删除字符串,搜索数组中的字符串,最终他们将能够对数组进行排序.分类是搞砸我的原因.我尝试过几种不同的方法.第一种方法是将数组转换为ArrayL ...
- C语言:用二维字符数组的每行存储键盘输入的字符串,将这些字符串按字典顺序升序排序,输出排序后的结果。
/*C语言:用二维字符数组的每行存储键盘输入的字符串,将这些字符串按字典顺序升序排序,输出排序后的结果.*/#include <stdio.h> #include <conio.h& ...
- 对字符串按“红黄蓝”进行排序,如“蓝黄红红黄”,输出结果为“红红黄黄蓝”
对字符串按"红黄蓝"进行排序,如"蓝黄红红黄",输出结果为"红红黄黄蓝" public static void main(String[] ...
最新文章
- 32位汇编寄存器及汇编指令
- Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo
- 岗位内推 | 微软亚洲互联网工程院自然语言处理组招聘NLP工程师
- Kylin安装,Kylin网页版教程学习
- 计算机模拟人工录入,用计算机模拟交互式输入代替人工进行流程录入
- Owner Useful links
- 搭建内网yum服务器
- windows 虚拟磁盘的软链接_如何在Windows的操作系统下创建VHD虚拟磁盘
- 错误解决:release' is unavailable: not available in automatic reference counting mode
- android访问asset目录下的资源
- linux发邮件权限,Linux通过命令行发邮件的步骤
- scala-Unit-3-Scala基础语法2
- Ubuntu - 安装gcc
- android后台获取当前屏幕截图(screencap.cpp修改)
- 深入理解AQS之ReentrantReadWriteLock详解
- Deepin Linux系统安装及显示器配置教程(可竖屏)
- php 中文转义问题
- 69 Three.js 导入Collada(.dae)格式的模型
- 上海租房房源数据分析(基于R的案例分析)(一)
- 2021年中式烹调师(中级)考试内容及中式烹调师(中级)新版试题
热门文章
- kubernetes RC(Replication Controller)和RS(Replicaset)的作用和区别
- jpeg 转rgb c 语言_威刚推出SE770G移动固态硬盘 主打高速传输和RGB灯效
- mysql+mmm+主动模式_MySQL集群搭建(4)-MMM+LVS+Keepalived
- linux程序设计大作业,LINUX/UNIX Shell编程大作业
- mysql报1665_mysql错误处理之ERROR 1665 (HY000)_MySQL
- springboot的学习笔记,这个很重要
- php 方法注释代码规范,PHP开发代码规范
- 【mysql】扩展-常用函数
- Linux chapter 2
- 悲剧!IDEA 突然找不到类了?