题目
输入一行,输出最小版本
示例
输入 2.4 2.10.3 5.4.6 7.6.5.4 3.2.12.12 1.4.5 1.10.8
输出 1.4.5
输入 5.6.7 4.3.1 7.8.4 5.10 3.4.4.4 3.4 4.7.0
输出 3.4
思路
先对输入的各个版本号进行排序,Arrays.sort();
第一位版本号的第一个数字,是最小版本的首位数字,据此可以排除一些不必要的循环判断。
对于首位相同的版本号,进行第二位以及其余位的判断。
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
while(in.hasNext()) {
String str = in.nextLine();
String[] split = str.split("\s");
// 字典序排列 从小到大
Arrays.sort(split);
// 最小版本起始
int min = Integer.parseInt(split[0].split("\.")[0]);
int index = 0;
for(int i=0;i<split.length;i++) {
if(min == Integer.parseInt(split[i].split("\.")[0])) {
boolean flag = isMin(split[index], split[i]);
// flag == false 说明当前版本数字大
if(!flag) {
index = i;
}
}
}
System.out.println(split[index]);
}
}
public static boolean isMin(String one,String two) {
String[] list1 = one.split("\.");
String[] list2 = two.split("\.");
int min = list1.length<list2.length ? list1.length:list2.length;
for(int i=0;i<min;i++) {
if(Integer.parseInt(list1[i]) < Integer.parseInt(list2[i])) {
return true;
}else if(Integer.parseInt(list1[i]) > Integer.parseInt(list2[i])){
return false;
}
}
if(list1.length <= list2.length) {
return true;
}else {
return false;
}
}
}