如何学好算法

如何学好算法

编码文章call10242025-06-21 17:56:333A+A-

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:大顶堆

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4