力扣算法合集

2023-11-12

algo

鸡汤篇

创作不易,感觉有帮助到你,可以顺手star

用产品思维帮助更多的人学习算法 更多的为用户考虑而写的一个仓库

用老罗的话 彪悍的人生不需要解释 挑一点恶心的干干 先开始写算法,像打造产品一样写一个算法仓库, 帮助更多的人学习算法,同样也是自我学习的过程

Java写的算法仓库 算法最重要的是心得

准备做一个长期的算法仓库 ,像阿甘一样做个傻子,不停奔跑,每天学习一个算法,复利思维

日拱一卒,功不唐捐

把人生比作公司或者游戏的话 , 我准备长期做的事情,一个是跑步锻炼身体,一个阅读书籍(技术类,非技术类书籍),一个就是这个算法仓库了

纸上得来终觉浅 ,绝知此事要躬行

三部曲: 模仿,学习, 超越

高筑墙 , 广积粮 , 缓称王

天道酬勤,勤能补拙。博观而约取,厚积而薄发

算法: 先把一个大问题拆解成一个个小问题 , 再解决小问题 , 小问题解决了拼接起来解决大问题

磨刀不误砍柴工, 磨石不误磨刀工

坚持下去,会有突然间成长的一天

自顶向下 ,逐步求精

费曼算法: 1.将问题写下来 2. 好好思考 3.将答案写下来

最笨的学习方法 就是把抄袭一遍也是最聪明的办法,遇到晦涩难懂的知识,大脑一下子接受不了,抄袭一遍之后,大脑慢慢接受

排序算法

  • 冒泡排序 :BubbleSort
  • 插入排序 : InsertSort 思路: 1. 每次碰到元素小的值 就往后面挪动一位 2.insertValue的值插入适当的位置
  • 选择排序 SelectSort 1.选择排序每次从未排序区间中最小的元素 2.首先找出数组中最小的哪个元素 ,其次,将它和数组的第一个元素交换位置 以此类推
  • 快速排序 1. 递归 2 。 二分 3. 双指针的思路
  • 计数排序
  • 归并排序 mergeSort 主要思想是递归 2. 主要是两个小的有序的数组合并成一个大的数组
  • 希尔排序 : ShellSort 思路 : 先分组 再使用插入排序 ,再缩小间隔d
  • 堆排序 :HeapSort 题解: 1. 堆存储结构是个数组 2. 先构建一个大顶堆 3 , 遍历取大顶堆 取最大值 == 牛客题解

二叉树

哈希表

栈和队列

数组

链表

字符串

  • 无重复字符的最长子串:LengthOfLongestSubstring 滑动窗口
  • 反转字符串

算法套路

双指针

排序

贪心思想

二分查找

搜索

动态规划

斐波那契数列
矩阵路径
数组区间
分割整数
最长递增子序列
最长公共子序列
01背包
股票交易
字符串编辑
接雨水

算法题解

  • 三数之和:ThreeNum 主要思路: 1.先排序 2.遍历每一个元素 3. 使用双指针

  • 股票问题:StockProfit 如何获得最大收益 思路: 记录最小值 ,差值较大的覆盖之前的

  • 缓存淘汰算法: LruCache 维护一个双向链表 ,一个hashMap 核心使用双链表记录最近使用和最久未使用的元素 ,若容量已满,淘汰最久未使用的key

  • 最小栈的实现 : MinStack 加一个辅助栈记录最小值 辅助很重要

  • 寻找两个数之和: FindSumNumbers 先构建map 然后再遍历

  • 数组中的第k个最大元素:KthlargestNumber 题解: 1. 把数组的前K个元素构建成最小堆 2.下沉操作保持堆的有效性

  • 用栈实现队列 :MyQuene 解题: 将一个栈当作输入栈,用于压入 \texttt{push}push 传入的数据;另一个栈当作输出栈

  • 寻找全排列的下一个数子: DictOrderAlgo 1. 从后向前查看逆序区域 ,找到逆序区域的前一位, 也就是数字置换的边界
    2. 让逆序区域的前一位和逆序区域中大于他的最小的数字交换位置
    3. 把原来的逆序区域转为顺序状态

  • 删除K个数字的最小值: RemoveKDigits 题解: 简化问题:如果只删除一个数字 ,如何让新整数的值最小 找出降序数字删除

  • 字符串匹配算法(RK算法):RabinKarp 题解: 比较两个字符串的hash

  • KMP算法: Kmp 题解: KMP算法的整体思路:在已匹配的前缀当中寻找最长可匹配后缀子串和最长可匹配前缀子串 ,在下一轮直接把两者对齐,从而实现模式串的快速移动

  • 迪杰斯特拉 : Dijkstra 思路: 维护一个距离表, 标记是否最短距离 ,动态规划更新最短距离表

  • LRU缓存机制 // 力扣 牛客

  • 合并两个有序数组 // 牛客

剑指offer

剑指offer-数据结构
剑指offer-二叉树
剑指offer-动态规划
剑指offer-查找和排序
剑指offer-回朔法
剑指offer

程序员代码面试指南左程云

第一章栈和队列

第二章链表问题

第三章二叉树问题

第四章递归和动态规划

####递推三部曲

递推三部曲
* 1. 边界条件
* 2. 递推公式
* 3. dp数组取值
* 套路 ; dp[i][j]  往往依赖  dp[i][i-1]  dp[i-1][j]  dp[i-1][j-1]  只要是动态规划就依赖这三个
回溯

第五章字符串问题

第七章位运算

第八章数组和矩阵问题

算法通关之路

第一章预备知识

第二章数学之美

第三章回文的艺术

发现规律 算法核心 有什么条件 要达到什么目的 例如:回文字符串要求是正读反读结果都是一样的句子 隐含条件 偶数个字符的话 每个字符都是成对出现的 奇数字符的话 只有一个字符是单独一个的 , 其他字符都是成对出现的

第四章游戏之乐

第五章深度优先遍历和广度优先遍历

第六章二分查找

第七章位运算

第八章设计

第九章双指针

第十章动态规划

第十一章滑动窗口

第十二章博弈问题

第十三章股票问题

第十四章分治法

第十五章贪心

第十六章回溯法

回溯法是一种复杂度很高的暴力算法 ,实现简单且有固定模板 。 不同于普通的暴力搜索 ,回溯法会在每一步判断状态是否合法,而不是等到状态全部生成后再进行确认

回溯讲的非常好的题解

第十七章一些有趣的题目

单调栈
单调栈牛客题解

第十八章一些通用解题模板

labuladong的算法小抄

第一章核心套路篇

数据结构的底层存储方式只有两种:数组(顺序存储)和链表(链式存储)。
数据结构是工具 ,算法是通过合适的工具解决特定问题的方法
计算机解决问题其实没有任何特殊技巧,它唯一的解决办法就是穷举

回溯算法框架:解决一个回溯问题,实际上就是一个决策树的遍历过程

  • 路径:也就是已经做出的选择
  • 选择列表:也就是你当前可以做的选择
  • 结束条件:也就是到达决策树底层,无法再做选择的条件
  • 写backtrack函数时,需要维护走过的"路径" 和当前可以做的"选择列表",当触发""结束条件"时,将"路劲"加入结果集

第二章动态规划系列

动态规划分为一下几步
*找到"状态"和"选择"
*明确dp数组/函数的定义

  • 寻找状态之间的关系
    *动态规划的通用技巧:数学归纳思想
  • 动态规划最优子结构以及dp遍历方向
  • 反向思考问题

前面多次强调过,很显然只要涉及求最值,没有任何技巧,一定是穷举所有可能的结果,然后对比得出最值

关于"状态"的穷举,最重要的一点就是:状态转移所依赖的状态必须被提前计算出来

经典动态规划 0-1背包问题
416.分割等和子集.java
完全背包问题
518.零钱兑换-ii.java 力扣题解

二叉树算法的设计总路线:明确一个节点要做的事情,然后剩下的事抛给递归框架
####二叉搜索树操作集锦
98.验证二叉搜索树.java
700.二叉搜索树中的搜索.java
701.二叉搜索树中的插入操作.java
450.删除二叉搜索树中的节点.java

完全二叉树的节点数为什么那么难算

297.二叉树的序列化与反序列化.java

遇到任何递归型的问题 ,无非就是"灵魂三问""
这个函数是干什么的
这个函数参数中的变量是什么
得到函数的递归结果,你应该干什么

236.二叉树的最近公共祖先.java

特殊数据结构 单调栈

496.下一个更大元素-i.java

739.每日温度.java

特殊数据结构 单调队列
秀操作之K个一组反转链表

第4章算法思维系列

通过经典问题来阐明一些常用的算法技巧,比如前缀和技巧,回溯思想,暴力穷举技巧

回溯算法解决子集,组合,排列

回溯模板

result = [] 
    def  backtrack(路径,选择列表):
           if 满足结束条件:
           result.add(路径)
           return
    for 选择 in 选择列表 :
           做选择
           backtrack(路径,选择列表):
           撤销选择
TwoSum问题的核心思想
摊煎饼也得有点递归思想
前缀和技巧解决子数组问题

第5章高频面试系列

编程之美 -微软技术面试心得

游戏之乐-游戏中碰到的题目

一摞烙饼的排序

第2章数字之魅-数字中的技巧

// 求二进制数中1的个数

第3章结构之法-字符串及链表的探索

队列中取最大值操作问题

程序员面试金典

数组与字符串

算法图书

学习最笨的办法就是看书拉,也是最聪明的办法 , 博览群书总会有不一样的收获。

  • 数据结构与算法分析:C语言描述_原书第2版_高清版

  • 算法图解.PDF

  • 数据结构 C++ .3rd_edn. 邓俊辉

  • 算法4

  • 算法新解

  • 我的第一本算法书

  • labuladong的算法小抄官方完整版.pdf

  • 阿里P8霜神的letCode刷题手册

  • 剑指OFFER 名企面试官精讲典型编程题 第2版

  • 算法设计 经典算法教材 豆瓣9.4评分

  • 200349 算法笔记.胡凡

  • 漫画算法 小灰的算法之旅

  • 2021最新版数据结构与算法面试题手册 1

  • 程序员代码面试指南 IT名企算法与数据结构题目最优解

  • 程序员面试金典第六版pdf

  • 对白的数据结构与算法笔记

  • 对白的LeetCode笔记

  • 西法的刷题秘籍-2021-04-20

我的手绘图解杂集

我的故事

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

力扣算法合集 的相关文章

随机推荐

  • ESP32 /ESP8266在VS Code and PlatformIO上传文件系统 (SPIFFS)

    ESP32 ESP8266在VS Code and PlatformIO上传文件系统 SPIFFS 学习如何上传文件到ESP32板文件系统 SPIFFS 使用VS Code与PlatformIO IDE扩展 快速和简单 使用ESP32的文件
  • 【计算机毕业设计】课堂考勤微信小程序 基于微信小程序的课堂考勤管理系统

    毕设帮助 源码交流 技术解答 见文末 一 前言 在目前国内的高校课堂考勤中 传统的到场点名方式耗费了教师大量的时间和精力 随着课堂人数的增加 学生群体呈现多样性 这种点名考勤方式将不再适合日常使用 而且传统的点名考勤无法避免代人答到现象 极
  • 包装类这颗语法糖,其实并不甜

    历史文章推荐 你真的了解时间吗 细数ThreadLocal三大坑 内存泄露仅是小儿科 Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUG ConcurrentHashMap中有十个提升性能的细节 你都知道吗 Hash
  • 2023年及以后语言、视觉和生成模型的发展和展望

    一 简述 在过去的十年里 研究人员都在追求类似的愿景 帮助人们更好地了解周围的世界 并帮助人们更好地了解周围的世界 把事情做完 我们希望建造功能更强大的机器 与人们合作完成各种各样的任务 各种任务 复杂的信息搜寻任务 创造性任务 例如创作音
  • 如何在jieba分词中加自定义词典_R-数据挖掘

    一 jiebaR主要函数 1 worker 加载jiebaR库的分词引擎 worker type mix dict DICTPATH hmm HMMPATH user USERPATH idf IDFPATH stop word STOPP
  • 少儿编程竞赛概览

    少儿编程竞赛概览 全国性竞赛活动名单的确定 最终确定的 29 项中的信息类竞赛 学编程的孩子可以报哪些比赛 CSP J S 计算机非专业组别能力认证 全国中小学生创 造大赛 蓝桥杯青少年创意编程比赛 全国青少年编程创意与智能设计大赛 全国中
  • Ubuntu系统操作指令详解

    Ubuntu系统操作指令详解 解压文件指令 vim使用指令 1 进入编辑模式 2 退出编辑模式 ls alh显示出来内容的意思 创建文件夹 创建文件 删除当前文件夹下所有文件 ubuntu删除命令记录的方法 Ubuntu中复制文件出现权限不
  • 从malloc中窥探Linux内存分配策略

    malloc函数是C C 中常用内存分配库函数 本篇文章将以Linux平台上的malloc为剖析对象 深入了解分配一块内存的旅程 malloc入门 使用malloc 需要包含头文件 stdlib h 函数原型如下 extern void m
  • utf8和utf8mb4的区别

    一 简介 MySQL在5 5 3之后增加了这个utf8mb4的编码 mb4就是most bytes 4的意思 专门用来兼容四字节的unicode 好在utf8mb4是utf8的超集 除了将编码改为utf8mb4外不需要做其他转换 当然 为了
  • c#之string和stringBuilder

    C String与StringBuilder 转载 1 什么时候用String 什么时候用StringBuilder 字符串一旦创建就不可修改大小 所以对字符串添加或删除操作比较频繁的话 那就不要用String而用StringBuilder
  • 【java8的特性-4】日期时间!

    一 获取当前时间 Java 8提供了三个主要的类来处理日期和时间 LocalDate LocalTime和LocalDateTime 以下是这些类的简要说明 LocalDate 代表一个日期 它包含了年 月 日等信息 但没有时间信息 Loc
  • 第四章:SQL Server2019数据库 之 综合案例练习、 使用SQL语句插入数据、更新和删除数据

    目录 一 综合案例 数据表的基本操作 二 插入数据 1 插入单行数据 2 插入多行数据 3 表中数据的复制 三 更新和删除数据 1 UPDATE 语句 2 DELETE 语句 学前必备知识 第一章 SQL Server 数据库环境搭建与使用
  • Linux 系统sudo apt-get update出错E: Problem executing scripts APT::Update::Post-Invoke-Success

    Ubuntu系统运行 sudo apt get update时报错如下 E Problem executing scripts APT Update Post Invoke Success if usr bin test w var cac
  • Java安全入门(二)——CC链1 分析+详解

    组件介绍 Apache Commons 当中有 个组件叫做 Apache Commons Collections 主要封装了Java 的 Collection 集合 相关类对象 它提供了很多强有 的数据结构类型并且实现了各种集合工具类 作为
  • 禁用Android切换动画

    禁用Android切换动画 前言 最近有个功能要禁用安卓activity的切换动画 找了几个方法 这里记录下 使用Theme 最简单的就是设置没有动画的主题了 在activity上增加notAnimation的theme属性 android
  • 4.5.7 c++求灯塔数量

    4 5 7 灯塔数量 有一八层灯塔 每一层的灯数都是上一层的一倍 共有765盏灯 求最上层和最下层的灯数 include
  • C++:map&&set的简单使用

    目录 关联式容器 键值对 树形结构的关联式容器 set find与count multiset map multimap 关联式容器 在初期我们接触到的vector list deque queue等 这些容器都称为序列式容器 因为其底层为
  • python for循环九九乘法表_python初学者-使用for循环做一个九九乘法表

    原博文 2020 03 22 08 51 for i in range 1 10 for j in range 1 i 1 print j i i j end end 以 结尾 print 相关推荐 2019 12 24 10 44 whi
  • 自学SQL习题答案整理(lesson4--)

    前几天看到一个学SQL的网站 感觉挺好的 但是比较少人用 链接 自学SQL 在这里放上一部分题目的答案 自己在mysql里实现了一下 方便以后再做这个练习的时候自查 主要是学习一些查询语句的运用 SELECT distinct direct
  • 力扣算法合集

    algo 鸡汤篇 排序算法 二叉树 哈希表 栈和队列 数组 链表 字符串 算法套路 双指针 排序 贪心思想 二分查找 搜索 动态规划 斐波那契数列 矩阵路径 数组区间 分割整数 最长递增子序列 01背包 股票交易 字符串编辑 算法题解 动态