登上刷题之路

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14080960.html

前言

通过看前辈对算法的分析,对于数据结构的其实就是数组和链表的组合这点,感觉如获至宝,前辈建议先刷二叉树,找套路,我这就开始刷刷二叉树,找套路(虽然疫情期间一直刷二叉树,但是由于时间和不总结原因忘得差不多了)。

 参考

前辈参考链接:https://labuladong.gitbook.io/algo/

力扣官网:https://leetcode-cn.com/leetbook/

数据结构

二叉树

参考链接:https://leetcode-cn.com/leetbook/read/data-structure-binary-tree/xe17x7/

二叉树简介

只有一个前驱结点,可以有多个后继结点的链表。

二叉树笔记

 先序遍历:根左右

 中序遍历:左根右

 后续遍历:左右根

二叉树刷题

 前序遍历博客链接:https://www.cnblogs.com/ping2yingshi/p/14085288.html

中序遍历博客链接:https://www.cnblogs.com/ping2yingshi/p/14089282.html 。

后序遍历博客地址:https://www.cnblogs.com/ping2yingshi/p/14092344.html 。

层次遍历博客链接:https://www.cnblogs.com/ping2yingshi/p/14097221.html 。

二叉树总结

1.在做二叉树的题目时,一般都有两张方法,一种是使用递归方法,一种是使用迭代方法。而使用迭代的时候,又可以分为是使用前中后序的方法迭代呢,还是使用层次遍历的方法迭代。

2.使用前中后序迭代方法时,一般使用栈。栈的特点是先进后出,所以在前序迭代时,需要先把根的右子树放入到栈中,在放左子树,在出栈时,就会先出根的左子树,在先序遍历就需要注意这点。而在中序遍历时,需要注意,中序遍历时先遍历左子树,所以要找到根的最左侧的左子树。而后序遍历和先序遍历正好是反着的,可以先先序遍历,然后利用栈的后进先出特点,可以把先序遍历后额度结果倒序输出就是后序遍历了。

递归模板

递归出口

遍历到空时结束

递归内容

判断左右子树是否为空,如果不为空则继续递归。

例如:

       if(root==null)
        {
             return ;
        }
        某种操作
        if(root.left!=null){
             Pre(root.left,list);
        }
         if(root.right!=null){
             Pre(root.right,list);
        }

迭代模板

先把根节点放入到栈或者队列中

结束条件

栈或者队列为空

迭代内容

出栈或者队列操作,判断左右子树是否为空,不空添加到栈或者队列中。

例如:

while(!stack.empty()){
            TreeNode temp=stack.pop();
            某种操作
            if(temp.right!=null){
                stack.push(temp.right);
            }
            if(temp.left!=null){
                stack.push(temp.left);
            }
        }

链表

链表简介

链表笔记

链表刷题

链表总结

反转链表的某部分

思路:可以使用迭代反转链表也可以使用递归反转链表。

迭代思想:双重循环,第一层循环先找到反转链表的需要反转的头部位置,第二层循环从开始需要反转的位置反转到结束位置。

动态规划

技巧

背包

贪心

哈希

使用情况

当有大量重复元素,还需要统计重复元素,或者有两件事情,需要比较求什么东西,这种一般用哈希表就完事了。华哥推荐的果然香。

 刷题博客

找不同博客链接:https://www.cnblogs.com/ping2yingshi/p/14157763.html

找到所有数组中消失的数字博客链接:https://www.cnblogs.com/ping2yingshi/p/14143863.html

存在重复的元素博客链接:https://www.cnblogs.com/ping2yingshi/p/14127491.html

两个数组的交集博客链接:https://www.cnblogs.com/ping2yingshi/p/14065888.html

重复N次的元素博客链接:https://www.cnblogs.com/ping2yingshi/p/14056380.html

在排序数组中查找元素的第一个和最后一个位置博客链接:https://www.cnblogs.com/ping2yingshi/p/14066225.html 。

单词规律博客链接:https://www.cnblogs.com/ping2yingshi/p/14066225.html 。

存在重复元素2博客链接:https://www.cnblogs.com/ping2yingshi/p/14054440.html 。

分糖果博客链接:https://www.cnblogs.com/ping2yingshi/p/14051225.html 。

只出现一次元素:https://www.cnblogs.com/ping2yingshi/p/14045519.html 。

解密字母博客链接:https://www.cnblogs.com/ping2yingshi/p/14022559.html 。

模板总结

初始化哈希表

 Map<Integer,Integer> map=new HashMap();//创建哈希表
        int len=nums.length;
        //创建哈希表
        for(Integer temp:nums)
        {
           Integer count=map.get(temp);//获取到i对应的value

           if(count==null)
           {
              map.put(temp,1);
           }
           else{
              map.put(temp,++count); 
           }
            
        }

取key的值做比较,然后使用key中的value值。

for(Integer i:map.keySet())
        {
             Integer count=map.get(i);
             if(count==1)
             {
                //  int result=map.keySet(i);
                 return i;
             }
        }

查找

排序

 

posted @ 2020-12-03 16:15  萍2樱释  阅读(126)  评论(0编辑  收藏  举报