龙空技术网

如何学好算法

mask哥 315

前言:

今天大家对“算法类问题求解的基本步骤”大概比较关怀,看官们都需要分析一些“算法类问题求解的基本步骤”的相关资讯。那么小编同时在网上汇集了一些关于“算法类问题求解的基本步骤””的相关知识,希望看官们能喜欢,姐妹们一起来了解一下吧!

p1.精通一个领域:

1.切碎知识;

2.刻意练习;

3.反馈;

算法和数据结构是内功,重在练习

p2.数据结构:排序;链表;list;spanning tree;树;图;栈;哈希表;

p3.切题4件套:1.分类;2.可能的解3.编码4.用例测试

p4.主定理-算法复杂度

p5.letcode:坚持练习;练习缺陷,弱点;不爽,枯燥;

题目+公司

leetcode做题4件套:

1.做题查(选择最优算法)

2.时间复杂度

3.编辑器写代码

4.反馈

数组 时间复杂度:

查询:o(1)

插入:平均o(n)

删除:平均o(n)

操作:插入,删除

链表linklist(单链表:节点数据和指向下个节点指针)

双向链表:有前驱previous,后驱next 数据节点

时间复杂度:

space:o(n)

prepend:o(1) 头追加

append:o(1)尾追加

查找:o(n)

插入:o(1)

删除:o(1)

堆栈(stack):实现通过链表/数组实现

队列:实现通过链表/数组实现

优先队列(priority Queue):优先队列

特点:正常入,按照优先级出

实现机制:

1.heap(二插堆,斐波)实现

MiniHeap:小顶堆

MaxHeap:大顶堆

2.Binary Search Tree(二叉搜索树)

双端队列(deque):两端都可以出

映射(map)&集合(set): 哈希表 哈希函数:

哈希碰撞(哈希重复):

哈希冲突:解决方式创建一个链表,即采用拉链法解决冲突

List Vs Map vs Set

hashMap vs treeMap

hashMap:采用hash表实现 复杂度 o(1)

treeMap采用 二叉树实现 复杂度 logN

hashSet vs treeSet

hashset采用hash表实现 复杂度 o(1) 快 无序

Treeset采用 二叉树实现 复杂度 logN 相对慢,有序

1.Tree /BinaryTree(二叉树)/Binary search tree(二插搜索树)

2.Graph(图)

数组产生链表,链表产生树,树产生图

平衡二叉树:

红黑树:

Java c++标准库都是用红黑树实现的

BST :二插搜索树

1.二叉树遍历方式:

中序遍历(In-order):左根右 =>array 升序

前序遍历

后序遍历:

2.Recursion(递归):

二叉树遍历:

Pre-oder(前序遍历):根-左-右

In-order(中序遍历):左-根-右

Post-order(后序比遍历):左-右-根

递归、分治

递归代码模板:

通过分治算法,可以并行计算解决问题

贪心(greedy):

贪心法又称贪心算法、贪婪算法:在对问题求解时,总是做出在当前看来是最好的选择。

广度优先搜索:BFS ??

深度优先:一查到底

数组 时间复杂度:

查询:o(1)

插入:平均o(n)

删除:平均o(n)

操作:插入,删除

链表linklist(单链表:节点数据和指向下个节点指针)

双向链表:有前驱previous,后驱next 数据节点

时间复杂度:

space:o(n)

prepend:o(1) 头追加

append:o(1)尾追加

查找:o(n)

插入:o(1)

删除:o(1)

堆栈(stack):实现通过链表/数组实现

队列:实现通过链表/数组实现

优先队列(priority Queue):优先队列

特点:正常入,按照优先级出

实现机制:

1.heap(二插堆,斐波)实现

MiniHeap:小顶堆

MaxHeap:大顶堆

标签: #算法类问题求解的基本步骤 #算法时间复杂度主定理 #算法类问题求解步骤是什么