OJ常用技巧-综述

OJ常用技巧-综述

OJ(Online Judgement),刷题是每个程序员日常都应该进行训练的小项目。它可以训练程序员解决问题的能力,加强对常用算法和数据结构的掌握程度,增进对编程语言的这种特性与常用库函数的使用。做到信手拈来,快速写出简洁、高效、逻辑清晰、无Bug的代码功能片段。因此,我打算结合自己日常刷题的经验总结一下三大主流语言C++、Python、Java OJ的常用技巧,本系列文章重点不在算法和数据结构,而在编程语言本身。算法和数据结构的重要性相信不用我说,各位程序员心里都有数,只是这方面内容已有很多,因此我换个思路,不再赘述。


C++ OJ常用技巧综述

C++ 刷题要熟练掌握STL库中提供的各种实用算法,实用容器,,,,,,,,,实用C++ 技巧,C++11新特性,以及lambda表达式。不光是它们的用法,还要关注底层实现的细节跟效率,虽然很多都可以自己实现,但是毕竟还是不要自己重复造轮子,多多利用已有的东西,往往能达到事半功倍的效果。

很多人相比Python而言认为C++ 代码写起来很是繁琐,一是确实C++ 语法较为复杂不够灵活所致,Python代码虽然简洁但是执行起来效率还是相比C++ 打了很多折扣;二是还是没有做到熟练灵活地掌握已有的工具库,语法特性,以及C++11 的新特性。

算法和数据结构的知识是所有刷题者都应掌握的基础知识,这里我们重点谈的是已有的工具,语言特性等。

参考列表:
* 《C++ Primer》
* 《Effective C++》、《Effective STL》
* 《STL 源码剖析》
* 《Designing Components with C++ STL》
* http://en.cppreference.com/w/


Java OJ常用技巧综述

STL的强大和完善,历来是其他语言争相模仿的范例。伴随着诸多企业级Web项目、诸多开源三方库、Maven仓库、大数据技术(Hadoop、Spark生态)、高可移植性、虚拟机HotSpot等技术的崛起,Java语言占据着重要的应用地位。

Java本身自己的标准库提供的工具用来OJ并不比C++的STL好用多少,但是随着Java 8中引入的Lambda表达式 和 Streaming API,让Java可以衍生出很多简洁、高效的编程,语言特性所带来的编程上的优势开始显现出来。

随着虚拟机技术的不断进步,HotSpot、JIT等技术大大地提高了Java代码的执行效率。

参考列表:
* 《Data Structures and Algorithm Analysis in Java》 - 3rd Edition
* 《Functional Thinking》
* 《Java Closures and Lambda》
* 《Algorithms》 - Sedgewick 4th Edition
* http://docs.oracle.com/javase/8/docs/api/


Python OJ常用技巧综述

Python语言的简洁众所周知,同时它也具备了很多现代编程语言的新特性如:闭包、Lambda表达式、Functional Programming等。numpy, scipy, sklearn, pandas, matplotlib, ipython, Jupyter Notebook 等等库,让Python在科学计算领域和R语言一样受到越来越多数据科学家的青睐,以至于可以用 R 和 Python 将数据科学家分为两类。 R更多的是数学和统计出身的数据科学家,Python更多的是计算机科学出身的数据科学家。当今很火热的深度学习框架 TensorFlow 也采用Python,据说Google的很多工程师日常快速开发原型也采用Python。由此可见Python的流行程度。

参考列表:

  • https://docs.python.org/2/
  • https://docs.python.org/3/
  • 《Data Structures and Algorithms in Python》
  • 《Python Algorithms》
  • 《Functional Python Programming》

你可能感兴趣的:(算法)