博客作业05--查找
1.学习总结
1.1查找的思维导图
1.2 查找学习体会
查找这一块所给的编程题不算多,直接的操作题好像更多。所涉及的内容概念也蛮多
都需要自己好好去理解。题目多用到递归,代码量不算多,但是较为灵活。自己操作
起来较为困难。而且基础的概念也要理解好,如哈希表这一块,基础的原理不清楚
就比较难想出思路了。还是要好好吃透。
2.PTA实验作业
2.1 题目1:6-2 是否二叉搜索树
2.2 设计思路
如果是空树
返回 true
如果遍历到没有左右子树,递归结束出口
返回 true
设p为根节点左子树
循环直到让p等于它的最右端
如果此时p的值大于根节点的值
返回 false
设p为根节点的右子树
循环直到让p等于它的最左端
如果此时p的值小于根节点的值
返回 false
递归返回 对左子树和右子树的判断
2.3 代码截图
2.4 PTA提交列表说明。
部分正确:没有用递归调用判断,开始只是用左右树一个节点与根节点比较导致错误。询问同学后
进行了方法的修改。
2.1 题目2:6-3 二叉搜索树中的最近公共祖先
2.2 设计思路
Find 函数
{
如果T为空
返回0 递归出口
如果a大于T的值
就往T的右树寻找
如果a小于T的值
就往T的左树寻找
如果找到
就返回1
}
LCA 函数
{
如果T为空
返回error
如果树中没有u和v的值
返回error
如果u和v一个比T的值大一个小
T就是他们的共同最近祖先
如果u和v有一个跟T的值相同
T就是他们的共同最近祖先
如果u和v都小于T的值
就往T的左树寻找
如果u和v的值都大于T的值
就往T的右树寻找
}
2.3 代码截图
2.4 PTA提交列表说明。
本题没有碰到什么问题
2.1 题目3:7-1 QQ帐户的申请与登陆
2.2 设计思路
输入的字符为'N'时
{ 判断里面是否有该账号记录
若没有{ 输出ok 并把数据输入}
若有{ 输出Exist} }
输入的字符为‘L’时
{ 判断里面是否有该账号的记录
若没有{ 输出 Exist}
若有{ 进一步判断密码是否正确 } }
2.3 代码截图
2.4 PTA提交列表说明。
本题没有碰到什么大的问题
3.截图本周题目集的PTA最后排名
本次题目集总分:120
3.1 PTA排名:
4. 阅读代码
题目:Happy数字,就是给一个正数s, 然后计算它每一个位上的平方和,得到它的下一个数, 然后下一个数继续及选
每位上的平方和……如果一直算下去,没有出现过之前有出现过的数字而出现了1, 那么恭喜,这就是个Happy Number.
class Solution {
public:
int calculate(int n)
{
int squared_sum = 0;
while(n)
{
int tmp = n%10;
squared_sum += tmp * tmp;
n/=10;
}
return squared_sum;
}
bool isHappy(int n)
{
bool isHappyNum = false;
unordered_set<int> mySet;
while(true)
{
//the final num is 1
if(n == 1)
{
isHappyNum = true;
break;
}
//a number appears more than once,indicating that falling into a loop with out 1
if(mySet.find(n) != mySet.end())
{
isHappyNum = false;
break;
}
mySet.insert(n);
//calculate the squared sum of every single digit in n
n = calculate(n);
}
return isHappyNum;
}
};
巧妙使用哈希表判断是否陷入了没有1的循环。