计蒜客-T1982日期排序(Java版本)

题目链接

https://vjudge.net/problem/%E8%AE%A1%E8%92%9C%E5%AE%A2-T1982

思路

先用set集合对原始数据按照yyyy/mm/dd格式进行排序,这样小的年份就在前面
然后遍历set集合的每一个字符串,就是每一个日期,进行转换成mm//dd/yyyy格式
存放到list集合里面
最后遍历list集合

代码

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;

public class Main {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		int n = _05Reader.nextInt();
		Set<String> set = new TreeSet<String>();
		for (int i = 0; i < n; i++) {
			//String对象是不可变的,所以利用+会建立一个新字符串对象,这是十分费时的,
			//而StringBuilder或StringBuffer类对象是可变的,可以添加、删除和修改字符。
			//由于StringBulider速度比StringBuffer快,所以StringBulider在OJ比赛中更常用
			
			String str = _05Reader.nextLine();
			StringBuilder sb = new StringBuilder();
			//转换成年月日的格式yyyy/mm/dd 方便排序
			String y = str.split("/")[2];
			sb.append(y);
			sb.append("/");
			String m = str.split("/")[0];
			sb.append(m);
			sb.append("/");
			String d = str.split("/")[1];
			sb.append(d);
			//排序用set
			
			set.add(sb.toString());
		}
		//遍历
		List<String> list = new ArrayList<String>();
		for (String string : set) {
			//最后再以mm/dd/yyyy方式输出
			StringBuilder sb2 = new StringBuilder();
			//转换成年月日的格式yyyy/mm/dd 方便排序
			String m = string.split("/")[1];
			sb2.append(m);
			sb2.append("/");
			String d = string.split("/")[2];
			sb2.append(d);
			sb2.append("/");
			String y = string.split("/")[0];
			sb2.append(y);
			
			//这里用一个list集合,不要再排序了,否则又回到起点
			list.add(sb2.toString());
			
		}
		for (String string2 : list) {
			System.out.println(string2);
		}
	}

}

class _05Reader {
	static BufferedReader br = new BufferedReader(new InputStreamReader(
			System.in));
	static StringTokenizer tokenizer = new StringTokenizer("");

	static String next() throws Exception {
		while (!tokenizer.hasMoreTokens()) {
			tokenizer = new StringTokenizer(br.readLine());
		}
		return tokenizer.nextToken();
	}

	static String nextLine() throws Exception {
		return br.readLine();
	}

	static int nextInt() throws Exception {
		return Integer.parseInt(next());
	}

}

说明

这个代码有点问题,这一题能通过测试用例,但是去OJ网上提交,提示只通过6组测试(共10组),不晓得代码出现什么问题,先这样吧…

发布了60 篇原创文章 · 获赞 4 · 访问量 1253

猜你喜欢

转载自blog.csdn.net/qq_43966129/article/details/105357108