首页 > 编程语言 > 详细

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

时间:2015-07-01 06:19:22      阅读:284      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!