题目
www.nowcoder.com/practice/[5…](www.nowcoder.com/practice/5a…)
我的题解
他妹的、大脑一片空表
参考题解-方法1
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
withArraysAPI();
}
// 方法一: 调用API Arrays.sort
public static void withArraysAPI() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] ss = new String[n];
for (int i = 0; i < n; i++) {
ss[i] = br.readLine();
}
br.close();
Arrays.sort(ss);
for (int i = 0; i < n; i++) {
System.out.println(ss[i]);
}
}
}
总结:
1、 BufferedReader的一次完整调用、好的参考、已总结到专门文章里
2、Arrays.sort(ss); 这个方法这回知道了
高效题解和参考题解-方法1 思路一致、就是在输出那里实现不同
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
withArraysAPI();
}
// 方法一: 调用API Arrays.sort
public static void withArraysAPI() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] result = new String[n];
for (int i = 0; i < n; i++) {
result[i] = br.readLine();
}
br.close();
StringBuilder sb = new StringBuilder();
Arrays.sort(result);
for (String w : result) {
sb.append(w).append('\n');
}
System.out.println(sb.toString());
}
}
总结:
1、StringBuilder 比循环执行System.out.println(ss[i]); 强30ms左右
StringBuilder sb = new StringBuilder();
Arrays.sort(result);
for (String w : result) {
sb.append(w).append('\n');
}
System.out.println(sb.toString());
for (int i = 0; i < n; i++) {
System.out.println(ss[i]);
}
参考题解-方法2
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
withPriorityQueue();
}
// 方法二: 使用PriorityQueue
public static void withPriorityQueue() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
PriorityQueue<String> pq = new PriorityQueue<>();
String s = "";
while ((s = br.readLine()) != null) {
pq.offer(s);
}
br.close();
while (!pq.isEmpty()) {
System.out.println(pq.poll());
}
}
}
总结:
1、不解释、PriorityQueue抓紧时间恶补
参考题解-方法3
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
withComparator();
}
// 方法三: 使用list并自己实现Comparator, 比较能体现算法的思路
public static void withComparator() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
List<String> list = new ArrayList<>();
String s = "";
while ((s = br.readLine()) != null) {
list.add(s);
}
br.close();
list.sort(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
int i = 0;
while (i < s1.length() && i < s2.length()) {
if (s1.charAt(i) != s2.charAt(i)) {
return (s1.charAt(i) > s2.charAt(i)) ? 1 : -1;
}
i++;
}
if (s1.length() == s2.length()) {
return 0;
} else {
return (s1.length() > s2.length()) ? 1 : -1;
}
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
总结;
1、list 和比较器也要巩固一下、然后再来吃这个写法