Coder Social home page Coder Social logo

algo's Introduction

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章结构之法-字符串及链表的探索

队列中取最大值操作问题

程序员面试金典

数组与字符串

代码随想录

第一章准备面试要知己知彼

拿不准的内容绝对写在简历上, 面试过程中,面试官一定是拿着你的简历开始问问题

  • 快速学习的能力

第二章 程序的性能分析

程序的性能分析离不开两个维度 一个是时间复杂度 一个是空间复杂度

内存管理

  • 栈区 : 由编译器自动编译释放,存放函数的参数值 局部变量的值等,其操作方式类似于数据结构中的栈
  • 堆区:一般由程序员分配释放 ,若程序员不释放,则程序结束时可能由系统收回
  • 为初始化数据区: 存放未初始化的全部变量和静态变量
  • 初始化数据区: 存放已经初始化的全部变量 和静态变量
  • 程序代码区域: 存放函数体的二进制代码

空间复杂度

第3章数组

数组是存储在连续内存空间上相同类型数据的集合,在数组中,可以方便地通过下标索引的方式获取相应的数据

第4章链表

4.1链表的理论基础

链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成 ,一个是数据域,另一个是指针域(存放指向下一个节点的指针) 最后一个节点的指针域指向NULL

第5章哈希表

哈希表是根据关键码的值访问数据的数据结构

第6章字符串

第7章 栈与队列

第8章 二叉树

递归三部曲

第9章 回溯算法

第10章 贪心算法

  • 贪心的本质是选择每一个阶段的局部最优,从而实现全局最优
  • 将问题分解为若干个子问题
  • 找出适合的贪心策略
  • 求解每个子问题
  • 分发饼干

第11章 动态规划

  • 状态转移公式(递推公式)

动态规划五部曲

##算法图书

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

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

  • 算法图解.PDF

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

  • 算法4

  • 算法新解

  • 我的第一本算法书

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

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

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

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

  • 200349 算法笔记.胡凡

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

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

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

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

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

  • 对白的LeetCode笔记

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

algo's People

Contributors

liangjian66 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.