设为首页 加入收藏

TOP

leetcode中,代码如何调试,创造本地运行环境(一)
2015-07-24 05:36:43 来源: 作者: 【 】 浏览:13
Tags:leetcode 代码 如何 调试 创造 本地 运行 环境

初次接触leetcode,是我在一个招聘网站上看的,这个OJ真有那么厉害吗?

这几天在这个OJ上做了几道题,发现他的几个特点,1、题目不难(相对于ACM来说,我被ACM虐到至今无力),评判没那么苛刻,2、十分基础,从链表、树到动态规划等,都是非常基本非常经典的内容,相当的靠基本功,3、没有本地调试环境,直接在网站上提交,后台评判系统帮你完成程序输入、评判输出的功能,4、国内外业内认可,有很多人都刷满了,留下了非常多的优秀的示例代码,5、支持C++ 11的特性哦,一个auto关键字会让你爽大大的。

所以我认定这个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<
  	ListNode *root = NULL;
        for(int i=0; i
   
    3、构造树
    

按照 123##5构造二叉树,其中constructTree函数属于按层构造二叉树的方式。

#include 
     
      
#include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
             #include 
             
               #include 
              
                #include 
               
                 using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int val):val(val), left(NULL),right(NULL){} ; }; TreeNode *constructTree(char *dat , int len) { TreeNode *root = NULL; int index = 0; if(len > 0) root = new TreeNode(dat[index] - '0'); else return NULL; list
                
                  node; node.push_back(root); index ++; while(index < len) { if(!node.empty()) { TreeNode *root = node.front(); if(index < len ) { if(dat[index] != '#') { root->left = new TreeNode(dat[index] - '0'); node.push_back(root->left); } index ++; } if(index < len ) { if(dat[index] != '#') { root->right = new TreeNode(dat[index] - '0'); node.push_back(root->right); } index ++; } node.pop_front(); } } return root; } class Solution { public: vector
                 
                   inorderTraversal(TreeNode *root) { vector
                  
                    tree; TreeNode *node = root; // traversal(node, tree); itera_traversal(node, tree); return tree; } void traversal(TreeNode *node, vector
                   
                     &tree) { if(!node) return; traversal(node->left, tree); tree.push_back(node->val); traversal(node->right, tree); } void itera_traversal(TreeNode *node, vector
                    
                      &tree) { stack
                     
                       lroot; TreeNode *root = node; while(root || !lroot.empty()) { while(root) { lroot.push(root); root = root->left; } if(!lroot.empty()) { root = lroot.top(); tree.push_back(root->val); lroot.pop(); root = root->right; } } } }; int main(int argc, char *argv[]) { if(argc < 2) { cout <<"Usage: ./binary_tree_inorder_traversal treelist(1234#5####6)"<
                      
                        seq = s.inorderTraversal(root); for(int i=0; i
                       
                        
不过这种123##5的方式有一定缺陷,在某个节点值为15、20,344等的时候,怎么办了,那就只能按照把所有参数都输入给main函数,执行时类似于

./validate_binary_search_tree.o 4 2 6 5 3 1 # 6

#include 
                         
                          
#include 
                          
                            #include 
                           
                             #include 
                            
                              #include 
                             
                               #include 
                              
                                #include 
                               
                                 #include 
                                 #include 
                                 
                                   #include 
                                  
                                    #include 
                                   
                                     #include 
                                    
                                      using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int val):val(val), left(NULL),right(NULL){} ; }; TreeNode *constructTree(int *dat , int len) { TreeNode *root = NULL; int
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu 4849 Wow! Such City!(dijstr.. 下一篇POJ 2075 Tangled in Cables (c++..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: