初次接触leetcode,是我在一个招聘网站上看的,这个OJ真有那么厉害吗?
这几天在这个OJ上做了几道题,发现他的几个特点,1、题目不难(相对于ACM来说,我被ACM虐到至今无力),评判没那么苛刻,2、十分基础,从链表、树到动态规划等,都是非常基本非常经典的内容,相当的靠基本功,3、没有本地调试环境,直接在网站上提交,后台评判系统帮你完成程序输入、评判输出的功能,4、国内外业内认可,有很多人都刷满了,留下了非常多的优秀的示例代码,5、支持C++ 11的特性哦,一个auto关键字会让你爽大大的。
所以我认定这个OJ对巩固算法和数据结构的基本功,以及应付面试笔试有很大作用,决定开始刷题。初次刷体感到非常不适应,题目网页只需要class Solution,没有输入,也没有输出什么的,调试在哪里?后来我发现,没有条件,那就需要自己创造条件了。因为网上大部分都是解题提交的思路,不利于新手上路,所以我想写这么一个帖子,希望能对他人有所帮助,所以大牛莫笑呵呵。
好吧,如果有链表题,那么我们自己写main函数,首先去构造链表,然后去排序啦去反向了什么的,如果有树题,那么我们自己写main函数,去构造树,然后调试。
嗯,这里就需要这么几个要素:
1、程序输入的数据,就是用来构造链表、树的内容的数据,一个来源是rand(),使用随机数,另一个来源就是手动输入了。
在链表题中,由于我们只需要一些内容,来看看排序效果什么的,所以可以通过随机数来产生数据,代码(只写有关的头文件和语句)如下:
#include <stdlib.h>
#include <time.h>
int lt = time(NULL);
srand(lt);
int len = rand()%100;
int data = rand() % 100;
如此去产生随机数据
在树题中,比如有题目是判断是否是对称树(symmetric tree),那么我们希望手动输入树的数据为好,将树的节点内容以main函数参数输入给程序,执行时如 :
./symmetric_tree 123##5
这里的123##5是leetcode中的树的表示,其实就是按照满二叉树的按层遍历来构造的,123##5构造了如下一颗树,其中2的1的左右孩子是2、3,2的左右孩子是##,就是空,2 是一个叶子节点了,3的左孩子是5,右孩子是空,空就不用输入数据了。调试时,我们需要按照这种方式构造树。