算法
文章平均质量分 68
Dm同学
博观而约取
展开
-
我的算法笔记 | leetCode easy题感受
本周刷了30道题LeetCode题。 选题的标准就是从Top榜里选easy,高频。都是easy题,也有可能是之前的有些题自己在很早之前也见过,这次刷起来极为顺手。虽然都是easy题,但感觉还是挺欣慰的。觉得从4月底到现在死磕的算法看到了一些成效。毕竟再简单的题,之前也是要费尽心思的看半天,然后对对答案再调试半天才能做出来。现在对大部分常见的简单题也可以上手就做了。逐渐对easy题有了一些掌控感。还有4天就到我的目标了。还有20道题。按照这个进度问题不大。算法如果收尾,还挺遥远的。毕竟还有动态规划和贪心还没原创 2022-06-26 22:07:05 · 337 阅读 · 1 评论 -
我的算法笔记 | 我决定摆烂了
本文是记录系统学习算法的一个过程记录。也是围绕我的计划 “80天刷题100道” 的一个总结记录。为什么要立这个Flag 呢,说白了还是觉得计算机这个行业已经卷到了一定的程度,而且从各个方面看到的信息,现在面试问算法已经是一个门槛。不希望自己因为算法而受到特别大的限制。另一方面也觉得算法无非也就这些东西,虽然它需要一定的时间,但是掌握了内核,应该也是一件一劳永逸的事情(当然还是需要复习的)。至少可以应对80% 的常见题目。所以决定把功夫用在平时,全力准备一段时间。为了防止自己半途而废,给自己立了一个flag原创 2022-06-19 22:23:42 · 464 阅读 · 4 评论 -
我的算法笔记 | 贪心算法理论知识(上)
1)最自然的算法(在当前形势下取最优)2)用一种局部最功利的标准,总是做出在当前看来是最好的选择3)难点在于证明局部最功利的标准可以得到全局最优解贪心算法无法得到最优解的例子:1,分析业务2,根据业务逻辑找到不同的贪心策略3,对于能举出反例的策略直接跳过,不能举出反例的策略要证明有效性1,实现一个不依靠贪心策略的解法X,可以用最暴力的尝试2,脑补出贪心策略A、贪心策略B、贪心策略C…3,用解法X和对数器,用实验的方式得知哪个贪心策略正确4,不要去纠结贪心策略的证明会议室能容纳的最多宣讲场次:一些项目要占用原创 2022-06-05 21:54:47 · 204 阅读 · 1 评论 -
我的算法笔记六 | 二叉树
在进入今天的二叉树的笔记之前,先简单回顾一下最近算法的学习内容。用了7周的时间,将基本的数据结构都过了一遍,并针对每个数据结构进行了练习。整体来说,对自己的进度还是非常满意的。另外这一遍刷题也明显手感要好一些了。努力不会白费!距离当初设立的flag ,时间正好过半。刷题46道。整体进度还行。Flag:从4.11 --6.30 刷100题本文总结二叉树的几种常见题型二叉树结构描述:Class Node { V value; Node left; Node right;}二叉树的原创 2022-05-22 21:34:12 · 169 阅读 · 1 评论 -
我的算法笔记| 前缀树
前缀树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。前缀树1)单个字符串中,字符从前到后的加到一棵多叉树上2)字符放在路上,节点上有专属的数据项(常见的是pass和end值)3)所有样本都这样添加,如果没有路就新建,如有路就复用4)沿途节点的pass值增加1,每个字符串结束时来到的节点end值增加1可以完成前缀相关的查询前缀树一般有两种表现形式,一种是字母在节点上,一种是字母在路径上。区别也不大。如图:图来自@五分钟学算法之Trie树还有另外一种表示,表示在路径上,然后原创 2022-05-15 23:52:35 · 183 阅读 · 0 评论 -
算法-堆排序及时间复杂度分析
堆结构1)堆结构就是用数组实现的完全二叉树结构。(完全二叉树:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。)2)完全二叉树中如果每棵子树的最大值都在顶部就是大根堆3)完全二叉树中如果每棵子树的最小值都在顶部就是小根堆4)堆结构的heapInsert(插入)与heapify(调整)操作5)堆结构的增大和减少6)优先级队列结构,就是堆结构语言提供的堆结构 vs 手写的堆结构取决于我们有没有动态改信息的需求。语言提供的堆结构,如果你动态改数据,不保证依然有序[ 手写堆原创 2022-05-08 23:16:07 · 5574 阅读 · 9 评论 -
算法 -归并排序改写快速排序
快速排序Partition过程给定一个数组arr,和一个整数num。请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)[ 荷兰国旗问题 ]快速排序1.0在arr[L..R]范围上,进行快速排序的过程:1)用arr[R]对该范围做partition,<= arr[R]的数在左部分并且保证arr[R]最后来到左部分 的最后一个位置,记为M; <= arr[R]的数在右部分(arr[M+1..R])2)对ar原创 2022-05-01 21:13:17 · 234 阅读 · 0 评论 -
算法 -归并排序
归并排序 归并介绍归并排序复杂度直观的说 为什么归并排序要比冒泡等排序快?例题及变种:本周打卡记录归并介绍1)整体是递归,左边排好序+右边排好序+merge让整体有序2)让其整体有序的过程里用了排外序方法3)利用master公式来求解时间复杂度4)当然可以用非递归实现归并排序复杂度T(N) = 2* T(N/2) + O(N^1)根据master公式可知时间复杂度为O(N* logN)merge过程需要辅助数组,所以额外空间复杂度为O(N)归并排序的实质是把比较行为变成了有序信息并原创 2022-04-24 23:49:42 · 552 阅读 · 0 评论 -
算法 - 打卡记录 | 前言
最近时间将针对算法进行体系性学习,后续将针对不同类型进行案例和算法心得的分享。本文开篇,聊下算法的几个常用的:算法体系评估算法优劣的核心指标时间复杂度额外空间复杂度常数项时间什么是时间复杂度?时间复杂度怎么估算?只看表达式最高阶项的部分当完成了表达式的建立,只要把最高阶项留下即可。低阶项都去掉,高阶项的系数也去掉。记为:O(忽略掉系数的高阶项)对数器1,想要测的方法a2,实现复杂度不好但是容易实现的方法b3,实现一个随机样本产生器4,把方法a和方法b跑相同的随机样本原创 2022-04-17 21:59:20 · 577 阅读 · 3 评论 -
读书笔记-函数式编程思维
学习笔记-函数式编程思维函数式编程思维主要内容演化的语言现实应用多语言与多范式读书《函数式编程思维》(Neal Ford 著) 目前理解的函数式编程思维,是一种抽象的映射关系,输入和输出之间的映射。应用这样的抽象,让我们不用关注于低层次细节的实现。最直观的感受就是Java8中的lambda也太好用了啊~函数式编程思维主要内容演化的语言现实应用多语言与多范式主要内容 范式转变...原创 2019-01-06 09:35:54 · 338 阅读 · 1 评论 -
读书笔记-数据结构
数据结构最近看数据结构与算法这本书,先将数据结构汇总一下。 KMP是觉得最有意思的部分之一了。原创 2018-08-04 15:39:18 · 265 阅读 · 1 评论