博客作业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的循环。
posted @ 2018-05-26 21:56  圣多美  阅读(199)  评论(1编辑  收藏  举报