刷题经验总结

本文详细阐述了学习数据结构与算法的重要性,包括数据、数据结构、算法的基本概念,以及时间复杂度和空间复杂度的衡量。作者提出了一套学习路径,从熟悉常见数据结构和算法套路,到刷题实践,最后达到独立解题并优化的能力。推荐了《大话数据结构》作为参考书籍,并提及一位b站up主的学习资源。文章以剑指offer和腾讯精选题库作为进阶刷题资料,强调每日刷题习惯的养成。
摘要由CSDN通过智能技术生成

都说没有最好的数据结构,只有最适合的数据结构。
虽然我们现在竟然调用一些现成代码包,这东西看着不一定能马上使用,但蕴含着编程最本质的一些逻辑与思想,使我们能够创作出更优美的代码。
不过学习它的过程并不容易,有时候遇到一些难题需要硬啃,真正理解那些巧妙的解法,再通过不断练习让自己学会运用、举一反三。

后面会按主题一一记录一些题目与解题思路,主题可能按数据结构、也可能按主要解题方法,题目范围会有交叠。

基本概念

  • 数据:描述客观事物的符号,计算机可以接收处理的对象

  • 数据结构:相互之间存在一种或多种关系的数据元素集合

  • 算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作

  • 计算机解决问题

    • 1.从具体问题中抽象出数据模型
    • 2.设计算法
    • 3.设计程序=算法+数据结构,实质是对确定的问题选择一个好的数据结构,再加上一种好的算法
  • 时间复杂度:算法语句的总执行次数量级(按最坏情况算)

  • 空间复杂度:算法占用的存储空间大小量级

这两个概念的具体衡量方式如下,假设数据元素输入量为n,
O(1)<O(logn)<O(n)<O(nlogn)<O( n 2 n^2 n2) <O( 2 n 2^n 2n)<O(n!)<O( n n n^n nn)

  • 以上从函数渐进增长的角度来比较快慢程度,函数渐进增长是指给定两个函数f(n)和g(n),存在一个整数N,当n>N时,f(n)>g(n),则称f(n)增长渐进快于g(n),这里记为f(n)>g(n)
  • 当n特别大时,只需关注最高阶项,常数项、非最高阶项、常数系数都可忽略

学习思路

入门阶段:

  • 先熟悉每个数据结构:
    • 数据结构是什么,基本操作的复杂度是多少,优缺点、应用场景
    • 用自己的编程语言如何实现该数据结构,该数据结构目前在自己的编程 语言里怎么调用,以及如何用自己的编程语言实现一些基本操作
    • 练习典型应用该数据结构的题目(两三个就好)

再熟悉常用解题算法套路:

  • 套路是什么
  • 一般遇到什么情况使用该套路
  • 练习典型应用该套路的题目(两三个就好,如果特别不熟悉可以再多练几个,要练太多怕过拟合)

进阶阶段:

  • 刷力扣题库,而且保证解题前不被剧透它的解题方向
    • 重复刷了三轮+
      • 第一轮只求做出、做不出看懂解题
      • 第二轮以面试方式做出、基本控制15min内、较难的20min内,做不出继续看题解
      • 第三轮面试10~15min内,并且能很快得到自己解题的复杂度,再看题解中的优秀答案进行优化
  • 这里我选了两个题库
    - (必选)剑指offer,75题
    - (可选)腾讯精选50题,50题

自由阶段:

  • 养成每日刷题的习惯

(这里学习了一位b站up主的思路,安利up主的作品,见参考资料)

目录

(待补充)

参考材料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值