当前位置: 首页 > news >正文

算法刷题框架

前言:最近积累了一些算法题量,正在刷东神的算法笔记,监督自己+记录下读后启发,顺便帮助道友们阅读

数据结构

这一部分老生常谈,数据的存储方式只有顺序存储和链式存储。

最基本的数组和链表对应这两者,栈和队列都可以用顺序存储和链式存储实现;图的两种表示方法,邻接表就是链表,邻接矩阵就是二维数组;散列表就是通过散列函数把键映射到一个大数组里;树用数组实现就是堆,因为堆是一个完全二叉树,用数组存储不需要节点指针,操作也比较简单,用链表实现就是常见的树。

在性能上,数组由于是紧凑连续存储,可以随机访问,通过索引快速找到对应元素,而且相对节约存储空间。链表因为元素不连续,而是靠指针指向下一个元素的位置,所以不存在数组的扩容问题;如果知道某一元素的前驱和后驱,操作指针即可删除该元素或者插入新元素,时间复杂度 O(1)。但是正因为存储空间不连续,你无法根据一个索引算出对应元素的地址,所以不能随机访问;而且由于每个元素必须存储指向前后元素位置的指针,会消耗相对更多的储存空间。

数据操作

众所周知的增删查改,抽象后就是遍历和访问。而遍历和访问分为线性的和非线性,线性是 for/while 迭代为代表,非线性是递归为代表。

算法心得

看了下作者的观点,发现自己真的对算法有误解,刷算法题重点是计算机思维,需要你能够站在计算机的视角,抽象、化简实际问题,然后用合理的数据结构去解决问题,而不是数学建模和调参经验。针对计算机的特点,算法题就是在穷举+优化。

算法的技巧上,都是被题目狠狠教做人😍

数组的有二分,双指针,滑动窗口,前缀和差分

链表日常双指针或者多指针,偶尔用哨兵节点

二叉树分为遍历一遍和利用递归分解,分别对应回溯和动态规划,有的时候需要剪枝和备忘录

http://www.lryc.cn/news/300124.html

相关文章:

  • 跟着cherno手搓游戏引擎【24】开启2D引擎前的项目总结(包括前置知识汇总)
  • 石子合并+环形石子合并+能量项链+凸多边形的划分——区间DP
  • IMX6ULL移植U-Boot 2022.04
  • ES实战-高级聚合
  • 网络安全产品之认识蜜罐
  • 推荐《架构探险:从零开始写Java Web框架》
  • Go教程-Go语言简介
  • React + SpringBoot + Minio实现文件的预览
  • 心法利器[107] onnx和tensorRT的bert加速方案记录
  • AcWing 122 糖果传递(贪心)
  • unity的重中之重:组件
  • Linux释放内存
  • Python算法题集_翻转二叉树
  • Git快速掌握,通俗易懂
  • PHP毕业设计图片分享网站76t17
  • 代码随想录 Leetcode45. 跳跃游戏 II
  • 【C语言】socketpair 的系统调用
  • 【论文精读】BERT
  • Codeforces Round 925 (Div. 3) - A、B、C、D、E
  • 快速部署MES源码/万界星空科技开源MES
  • 【Python网络编程之TCP三次握手】
  • 【leetcode】深搜、暴搜、回溯、剪枝(C++)2
  • 鸿蒙开发-UI-图形-图片
  • .NET Core WebAPI中使用Log4net记录日志
  • Nginx配置php留档
  • 英语题不会怎么搜答案?分享五个支持答案和解析的工具 #学习方法#媒体
  • Rust 数据结构与算法:4栈:用栈实现进制转换
  • 树莓派4B(Raspberry Pi 4B)使用docker搭建阿里巴巴sentinel服务
  • Django视图
  • python基本语法