题目一:
写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
说明:定义两个变量,一个存放最大值绝对值和一个存放最小值绝对值,遍历一般二叉树,进行绝对值比较,更新最大、最小绝对值。遍历二叉树的方法分递归和循环。
一下采用循环遍历二叉树
程序:
struct BinarytreeNode
{
int val;
BinarytreeNode *left;
BinarytreeNode *right;
};
unsigned int abs(int value)
{
if(value>=0)
return value;
else
return -value;
}
unsigned int diff_abs(BinarytreeNode *root)
{
if(!root)
{
cout<<"invalid binarytree"<<endl;
return 0;
}
unsigned int min,max,abs_value=0;
min=abs(root->val);
max=min;
std::deque<BinarytreeNode *> dequetreenode;
dequetreenode.push_back(root);
while(dequetreenode.size())
{
BinarytreeNode *pNode=dequetreenode.front();
dequetreenode.pop_front();
abs_value=abs(pNode->val);
if(min>abs_value)
min=abs_value;
if(max<abs_value)
max=abs_value;
if(pNode->left)
dequetreenode.push_back(pNode->left);
if(pNode->right)
dequetreenode.push_back(pNode->right);
}
return max-min;
}
题目二:
给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。
说明:能力有限,最快想到的就是暴力匹配,时间复杂度最大为O(n^2)。
后面网上找到别人的解法,网址 http://www.cnblogs.com/ider/p/longest-common-substring-problem-optimization.html
程序:
unsigned int substr_length(string query,string text)
{
unsigned int max_length=0;
int t_length=text.size();
int q_length=query.size();
int length=0;
for(int i=0;i<t_length;++i)
{
for(int j=0;j<q_length;++j)
{
length=0;
if(query[j]==text[i])
{
int m=i;
int n=j;
for(;m<t_length&&n<q_length;++m,++n)
{
if(text[m]==query[n])
++length;
else
break;
}
}
if(length>max_length)
max_length=length;
}
}
return max_length;
}
题目三:
java中的wait()方法和sleep()方法的区别是什么
说明:没有了解过java,基本就是看书和百度了下,随便写了点