编程之美&其他题目
文章平均质量分 77
zsuguangh
这个作者很懒,什么都没留下…
展开
-
编程之美2.14扩展问题2 求数组的子数组之和的最大值并给出子数组的起始终止位置
<br />求子数组之和的最大值采用之前的博客编程之美2.14 求数组的子数组之和的最大值中的动态规划方法,时间复杂度为O(N),在求nAll的过程中,记录子数组和最大值的那个数组的起始位置start跟终止位置end,下面的源码也分成了两种情况处理,一种情况是数组元素全为负的时候返回最大的负数,数组中除了0就是负数的情况则返回最后一次出现的那个0所在的位置(对应于程序的define RETURN_MAXMINUS块);另外一种情况是数组元素全为负数的时候返回0并置start跟end为-1,数组中除了0就是负原创 2011-04-21 00:21:00 · 2799 阅读 · 0 评论 -
编程之美2.14扩展问题1 求子数组和的最大值(首尾可以相连)
<br />整体思路:<br />问题的解可以分为两种情况:<br />1)解没有跨过A[n-1]到A[0],即普通的求子数组和的最大值<br />2)解跨过A[n-1]到A[0]<br />对第二种情况,只要找到从A[0]开始和最大的一段(A[0],...,A[j])(0<=j<n)以及A[n-1]结尾的和最大的一段(A[i],...,A[n-1])(0<=i<n),那么第2种情况中,和的最大值M_2为:<br />M_2=A[i]+...A[n-1]+A[0]+...+A[j]<br />如果i<=j,原创 2011-04-21 11:15:00 · 2704 阅读 · 4 评论 -
编程之美2.14 求数组的子数组之和的最大值
<br />问题描述:<br />一个有N个整数元素的一维数组(A[0],A[1],...A(n-1),它包含很多子数组,求子数组之和的最大值,当数组元素全部为负的时候,有两种处理办法,第一种是返回0,第二种是返回数组中最大的负数。<br />解法1:<br />使用暴力法,假设最大的一段数组为A[i],...,A[j],则对i:=0~n-1 j:=i~n-1,遍历一遍,求出最大的Sum(i,j)即可<br />解法2:<br />使用分治法,数组(A[0],A[1],...A(n-1)分为长度相等的两段数原创 2011-04-20 20:05:00 · 2697 阅读 · 2 评论 -
编程之美2.5 寻找最大的K个数
/********************问题描述************************有若干个无序的数(假设数目为N),如何选择其中最大的K个数*****************************************************/#include#include#includeusing namespace std;/***********************解法一:全部排序**************将输入的N的数排序,然后选出原创 2011-04-21 21:41:00 · 2476 阅读 · 2 评论 -
编程之美2.17 数组循环移位
<br />问题描述<br />把一个含有N个元素的数组循环右移K位,如K=4的时候abcd1234->1234abcd。一般考虑K>0的情况,即右移;同时K<N,当然K>=N的话可以通过K%=N得到一样的结果<br /> <br />解法思路详见代码注释<br />/****************************问题描述*****************************把一个含有N个元素的数组循环右移K位,如K=4的时候abcd1234->1234abcd一般考虑K>0的情况,即原创 2011-04-22 00:22:00 · 1364 阅读 · 0 评论 -
编程之美3.9 重建二叉树
<br />问题描述:给定一个前序遍历和一个中序遍历,重建一棵二叉树。如:<br />前序:a b d c e f<br />中序:d b a e c f<br />a是根节点。<br />思路:根据前序,可以很快找出根节点a,然后根据中序,可以找出根节点a的左右子树,然后递归求a的左子树前序b d跟中序d b,a的右子树前序c e f跟中序e c f即可<br />#include<iostream>using namespace std;//定义树的长度#define TREELEN 6转载 2011-04-28 00:59:00 · 1672 阅读 · 0 评论 -
编程之美3.8 求二叉树中节点的最大距离
<br />转自:http://www.cnblogs.com/miloyip/archive/2010/02/25/1673114.html问题定义<br />如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。<br />书上的解法<br />书中对这个问题的分析是很清楚的,我尝试用自己的方式简短覆述。<br />计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节点,通过根节点,再到转载 2011-04-27 21:22:00 · 1269 阅读 · 0 评论 -
编程之美 2.1 求一个数的二进制表示中1的个数
<br />/**************问题描述************求二进制数中1的个数**********************************/#include<iostream>using namespace std;/****************解法一:直接除2*******************对num除以2,余数为1则result加1,时间复杂度为O(logv)v为num的二进制位数**************************原创 2011-04-30 02:02:00 · 1330 阅读 · 0 评论 -
编程之美 2.2阶乘中最低位0的个数&二进制表示中最低位1的位置
<br />/***************************问题描述**************************1. 给定一个整数N,那么N的阶乘N!末尾有多少个0?2. 求N!的二进制表示中最低位1的位置*************************************************************//************************问题1思路****************************N!=K*powe原创 2011-05-03 00:48:00 · 2184 阅读 · 1 评论