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

非科班菜鸡算法学习记录 | 代码随想录算法训练营完结!

这俩月终于结束了233333,之后就是反复复习和背八股了吧,然后整整项目春招再投投投,感觉大部分题都有思路了但是做过的题也会没思路,还是要复习

总结

数组:

        双指针用的很多,一般一个指向遍历位置,另一个指向插入位置

链表:

        也是双指针比较多,注意可以创造一个dummy节点指向头节点,从dummy开始遍历会比较方便;环形链表位置是快慢指针,快走2慢走1,它们肯定会在慢没走完环的一圈时相遇,此时把慢指针放在头节点,两个指针同步走,相等的位置即环入口

哈希:

          unordered_map; unordered_set;解决字母异位词,几数之和等;去重常用set;map一般key保存值,value保存下标

栈和队列:

        有效的括号,栈和队列互相实现

二叉树:

        两种,迭代(层序)和递归(深度);迭代时是用一个队列保存节点,记录每层节点数size,当pop节点时,size--(到0时该层结束),并把他的左右孩子进入队列;

        递归:

  1. 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

  2. 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

  3. 确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

回溯:

       三要素

        回溯函数模板返回值以及参数

        回溯函数终止条件

        回溯搜索的遍历过程

void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}

贪心:

       没有套路,大概就是局部最优可以推到全局最优

动规:

  1. 确定dp数组(dp table)以及下标的含义

  2. 确定递推公式

  3. dp数组如何初始化

  4. 确定遍历顺序

  5. 举例推导dp数组

最重要的还是01背包和完全背包,是指有物品i,重量为weight[i],价值为value[i],装满这个背包所能得到的最大价值;dp[i][j]为取【0,i】物品时[重量为j]的最大价值;

       01: dp[i][j] =max( dp[i-1][j]  , dp[i-1][j-weight[i]] + value[i] ) // 不取i但重量为j的价值和取i重量为j的最大值

压成一维数组
                dp[j] =max( [j]  , dp[j-weight[i]] + value[i] )// 每一层的dp是由上一层的dp来的,所以只需要一维就可以了,注意第二层for要从后往前遍历,保证物品i只被放入一次!

for(int i = 0; i < weight.size(); i++) { // 遍历物品for(int j = bagWeight; j >= weight[i]; j--) { // 遍历背包容量dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);}
}

  完全背包:

// 先遍历物品,再遍历背包
for(int i = 0; i < weight.size(); i++) { // 遍历物品for(int j = weight[i]; j <= bagWeight ; j++) { // 遍历背包容量dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);}
}

单调栈:

主要是用来找左右第一个比自己大或者比自己小的元素,还不熟练具体看之前每日总结

最后!感谢卡哥!也感谢能坚持下来的自己,至少秋招面对昨天还能挣扎一下不至于直接寄!

轻舟已过万重山!!!

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

相关文章:

  • C语言实现三字棋
  • 【LeetCode】35.复杂链表的复制
  • 代码大全阅读随笔(五)
  • No1.详解【2023年全国大学生数学建模竞赛】C题——蔬菜类商品的自动定价与补货决策(代码 + 详细输出 + 数据集代码 下载)
  • 有什么好用的电容笔?apple pencil替代品推荐
  • 什么是回调函数?写出一个示例?
  • 深度学习在医疗保健领域的应用:从图像识别到疾病预测
  • SpringBoot实现自定义environment中的value加密
  • celery的用法--任务调度
  • MyBatis-Plus学习笔记总结
  • How Language Model Hallucinations Can Snowball
  • autojs修改顶部标题栏颜色
  • arppy gis 读取text 并批量添加字段 arcpy.AddField_management
  • Pandas中at、iat函数详解
  • 【Spring Boot】JPA — JPA入门
  • c#反射(Reflection)
  • Lua 元表和元方法
  • 【Git】01-Git基础
  • 【Vue2.0源码学习】生命周期篇-初始化阶段(initState)
  • 专升本英语零基础学习
  • QUIC协议连接详解(二)
  • JAVA 经常遇到一些问题【第二部分36~51】
  • 蓝桥杯打卡Day6
  • spark集群问题汇总
  • WebServer 解析HTTP 请求报文
  • Golang开发--interface的使用
  • 2023 年高教社杯全国大学生数学建模竞赛题目 B 题 多波束测线问题
  • leetcode算法题--生成特殊数字的最少操作
  • 数学建模--决策树的预测模型的Python实现
  • Linkstech多核并行仿真丨光伏发电系统模型及IEEE 39 bus模型多核并行实测