初次接触leetcode,是我在一个招聘站点上看的,这个OJ真有那么厉害吗?
这几天在这个OJ上做了几道题,发现他的几个特点,1、题目不难(相对于ACM来说,我被ACM虐到至今无力),评判没那么苛刻,2、十分基础,从链表、树到动态规划等,都是很基本很经典的内容。相当的靠基本功,3、没有本地调试环境,直接在站点上提交,后台评判系统帮你完毕程序输入、评判输出的功能,4、国内外业内认可。有许多人都刷满了,留下了许多的优秀的演示样例代码。5、支持C++ 11的特性哦,一个autokeyword会让你爽大大的。
所以我认定这个OJ对巩固算法和数据结构的基本功,以及应付面试笔试有非常大作用。决定開始刷题。
初次刷体感到非常不适应,题目网页仅仅须要class Solution,没有输入,也没有输出什么的,调试在哪里?后来我发现,没有条件,那就须要自己创造条件了。
由于网上大部分都是解题提交的思路。不利于新手上路,所以我想写这么一个帖子,希望能对他人有所帮助,所以大牛莫笑呵呵。
好吧。假设有链表题。那么我们自己写main函数,首先去构造链表,然后去排序啦去反向了什么的。假设有树题,那么我们自己写main函数,去构造树,然后调试。
嗯,这里就须要这么几个要素:
1、程序输入的数据,就是用来构造链表、树的内容的数据。一个来源是rand(),使用随机数,还有一个来源就是手动输入了。
在链表题中。因为我们仅仅须要一些内容,来看看排序效果什么的。所以能够通过随机数来产生数据,代码(仅仅写有关的头文件和语句)例如以下:
#include如此去产生随机数据#include 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。右孩子是空,空就不用输入数据了。调试时,我们须要依照这样的方式构造树。
1
2 3
# # 5
2、构造链表,代码例如以下
void addToTail(ListNode **head, int val){ ListNode *node = new ListNode(val); if(!*head) { *head = node; } else { ListNode *tmp = *head; while(tmp->next) tmp = tmp->next; tmp->next = node; }}
int main(){ int lt = time(NULL); srand(lt); int len = rand()%20; cout << len<3、构造树ListNode *root = NULL; for(int i=0; i
依照 123##5构造二叉树,当中constructTree函数属于按层构造二叉树的方式。
#include#include #include #include #include #include #include #include
./validate_binary_search_tree.o 4 2 6 5 3 1 # 6
#include这种方法将每一个參数都atoi为整数,那么在构造二叉树函数constructTree中,就须要注意。‘#’的ascii码值是34,小心哦。只是用来測试,勉强可用吧。#include #include #include #include #include #include #include