昨日参加hackerrank一比赛总结

昨天第一次参加hackerrank的某比赛,从中午11点做到了晚上12点,最后太累,在比赛结束前一小时睡觉去了。完全通过了前两道题,第三题对于某句话始终未能正确理解,所以未通过该题大部分test case,最后在该比赛排名在23**/60**。自己是抱着学习的心态去的,虽然这个成绩没什么可炫耀的,但是还是要总结一下。

  • 发现自己需要提高
    最好的前五名做题快且对,确实高手如云。第一名好像所有题目都做对了,时间只花了5个小时。
    看到了自己需要提高的地方

  • 基本数据结构有待提高
    因为喜欢用Java,不过对于有的数据结构还不太熟练,所以花了一些时间了解有关类的用法,
    比如最喜欢用的hashmap,关于HashMap是这样的,定义

HashMap<String,int>

会报错,而改为

HashMap<String,Integer>

就OK了。
对于输入时就需要生成排序列表,然后按顺序挨个访问的情况,采用了PriorityQueue,个人觉得这个类还是很好用的。

  • JUNIT是必须的
    因为每道题目的输入都是从STDIN灌入的,对于简单题目可以手动一次一次敲,但是对于复杂的题目,一次一次手敲会累死,且慢且容易出错
    后来在比赛结束前几个小时,受够了手动输入测试用例,
    然后调整了程序架构,开始使用JUNIT测试,
    但是最新的JUNIT4跟JUNIT3比有很大的调整,改为了测试用例方法前加@test标记,
    而且由于机器上环境有限,所以需要用命令行执行JUNIT4,
    所以又摸索了一些时间。用了JUNIT以后,感觉心里更有底了。

  • 把握时间
    早上是我的黄金时间,但是我扯了一个多小时电话,这个是失策,

  • 尽量用高效算法
    昨天有道题,某输入变量最高值可达100000,然后看到讨论组有些人因为超时而未通过某些测试用例,估计他们采用了循环套循环又套循环这种层层嵌套的方法。
    因此,可能对于最高输入值超过50的,都尽量避免蛮力搜索。

  • 准确理解题意
    昨天,第三道题内的有一句话,出题的人没有给出详细的解释,到最后才发现,自己其实完全不理解这句话,但是我已经没时间去讨论组询问了。
    所以,对于这种题目,可能首先我不该做,
    其次,如果非得做,我应该去讨论组提出我的疑问,尽量用一个具体例子,让出题的人来答疑

  • 边界值
    昨天有道题,不小心边界条件漏掉一个值,导致一半的测试用例未通过。最后我修正了,就全部通过了。
    这个事情要预防,就是编程的时候,自己控制边界值,然后模拟这种情况。
    有时候,边界值太大,导致无法人工创建正确的测试用例,那么这时候可能需要创造条件,比如,昨天有个边界值可达100000,如果自己没条件在这种条件下人工弄出一个正确的测试用例,可以把它改成5,这样可以人工弄出一个对应的正确的测试用例,然后测试一下这个边界。

  • 选题原则
    做自己能透彻理解的题目,理解不了可能不该做。
    如果非得做,就应该去讨论组询问,弄懂意思,再做。
    有的题目如果实在搞不懂,应该放弃,选做别的
    而且根据自己的情况,看一下平均提交正确率,选适合自己水平的题目。

  • 加强对算法、数据结构、数学的学习
    起码不会把时间浪费在熟悉基础数据结构、修改语法错误、熟悉经典算法等等问题
    加强数学修养,把握问题本质
    这样比赛的时候,就能把精力放到问题的本身,而不是其他细枝末节上。

  • 绝不可以抄袭
    不可以向任何人公布自己的代码,被抄袭者和抄袭者都会被取消资格,这是不值得的。

  • 尽量帮助别人
    昨天在水深火热解题中,突然看到有人在8小时前发来消息,咨询某题目思路。虽然自己觉得太菜,不可能有人会来求助,但是这事还是发生了。所以非常简单地介绍了一下总体思路。
    帮助别人可以,但是规则不允许直接把算法和代码直接告诉别人。所以还要把握度的问题。

  • 题目是用英语出的
    所以这也是练习英语的好机会。

总而言之,很感激有Hackerrank这个公平竞争的平台,希望可以不断进步!

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页