【TopCoder】SRM151 DIV2 练习总结

第一次做完整的SRM题,刷完感觉萌萌哒,不过自己对java中很多细节不熟练,还要边做题边google。

250分的题:判断字符串序列是否是前缀码,如果不是,返回第一个违反前缀码规则的字符串。

简单的暴力方法,要积累的是java中startsWith的用法:

1 public boolean startsWith(String prefix)

如果prefix是调用该函数的字符串的前缀,返回true,否则返回false。从实际经验来看,对大小写是敏感的,即No不是not的前缀。

完整代码连接:GitHub

500分题:给定一个日期和一组人的生日,问从当前日期开始,下一次生日在什么时间。

首先对这组人的生日排序,然后用二分查找当前日期;如果找到,就返回当前日期;否则,返回数组中第一个比当前日期大的日期。另外需要注意的一点是,如果数组中没有比当前日期大的日期,则返回数组中最小的日期(相当于从明年开始算)。

积累java中Comparator的使用方法:实现一个新的类,并且实现接口Comparator,即实现函数compare。在compare中,如果两个对象是小于关系返回1,等于返回0,大于返回-1。

实现了这个接口以后,无论是排序还是二分,都可以用java自带的函数了,十分方便快捷。

完整代码连接:GitHub(不过这题我有个case没过T_T)。

1000分题:计算mergesort中元素的比较次数,mergesort的过程题目很有爱的用伪码给出了。

就是实现一个mergesort就可以了。

完整代码:GitHub

原文地址:https://www.cnblogs.com/sunshineatnoon/p/3926639.html