码迷,mamicode.com
首页 > 编程语言 > 详细

常见数据结构算法边学边记

时间:2015-07-01 06:21:05      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:数据结构

一、如何判断链表中有无环

解法:设置了两个指针p和q,他们分别以速度为1和2前进(公式应该是p和q分别以速度为v1和v2且|v2-v1|为1),如果到某一次循环发现他们相等,即都指向同一结点(空节点除外,以后讨论的节点都不包含空节点),则说明这个单向链表中存在循环。否则就是没有循环。


二、最大子序列问题:给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大

解法:运用动态规划的思想,才能达到线性复杂度

//线性的算法O(N) 

long maxSubSum4(const vector<int>& a) 

       long maxSum = 0, thisSum = 0; 

       for (int j = 0; j < a.size(); j++) 

       

              thisSum += a[j]; 

              if (thisSum > maxSum) 

                     maxSum = thisSum; 

              else if (thisSum < 0) 

                     thisSum = 0; 

       

       return maxSum; 

}



三、如何判断一棵二叉树是否是平衡二叉树

解法:根据平衡二叉树的定义,如果任意节点的左右子树的深度相差不超过1,那这棵树就是平衡二叉树。

那怎样才能达到线性复杂度呢?这里运用

动态规划

的思想

那怎样才能达到线性复杂度呢?这里运用

动态规划

的思想

常见数据结构算法边学边记

标签:数据结构

原文地址:http://muyunzhe.blog.51cto.com/9164050/1669563

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!