算法
文章平均质量分 56
得克特
深度学习 python
展开
-
算法:图遍历
面试题 16.19. 水域大小原创 2024-04-26 16:20:35 · 409 阅读 · 0 评论 -
二分法、梯度下降法、牛顿法求解根号
牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。这种方法可以很有效地求出根号 a的近似值:首先随便猜一个近似值 x,然后不断令 x 等于 x 和 a/x 的平均数,迭代个六七次后 x 的值就已经相当精确了。在这里,我们使用了微积分里导数,通过求出函数导数的值,从而找到函数下降的方向或者是最低点(极值点)。这种算法的原理很简单,我们仅仅是不断用 (x, f(x)) 的切线来逼近方程的根。转载 2024-04-20 11:57:25 · 30 阅读 · 0 评论 -
算法:指针
常见的双指针。原创 2024-04-19 22:08:21 · 344 阅读 · 0 评论 -
算法--目录
algorithm: 十种排序算法algorithm: 拓扑排序差分数组-解题原创 2024-04-15 11:13:19 · 162 阅读 · 0 评论 -
差分数组-解题
你可以假设所有人都出生于 1900 年至 2000 年(含 1900 和 2000 )之间。如果一个人在某一年的任意时期处于生存状态,那么他应该被纳入那一年的统计中。例如,生于 1908 年、死于 1909 年的人应当被列入 1908 年和 1909 年的计数。给定 N 个人的出生年份和死亡年份,第 i 个人的出生年份为 birth[i],死亡年份为 death[i],实现一个方法以计算生存人数最多的年份。如果有多个年份生存人数相同且均为最大值,输出其中最小的年份。原创 2024-04-15 11:03:40 · 166 阅读 · 0 评论 -
算法中的背包问题
背包问题原创 2024-04-14 18:40:58 · 246 阅读 · 0 评论 -
前缀和-解题集合
前缀和是一种重要的预处理,可以降低查询的时间复杂度。原创 2024-04-14 11:21:14 · 394 阅读 · 0 评论 -
最长子序列问题
给你一堆n个箱子,箱子宽 wi、深 di、高 hi。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的。给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。输入使用数组[wi, di, hi]表示每个箱子。原创 2024-04-11 14:13:08 · 212 阅读 · 0 评论 -
给定字符串,替换所有的‘?‘
递归,时间复杂度O(2^k),k为’?动态规划,时间复杂度O(n)原创 2024-04-10 15:50:37 · 147 阅读 · 0 评论 -
二分法-各种应用
二分法解题集合原创 2024-04-03 23:17:07 · 233 阅读 · 0 评论 -
并查集-题目
并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。并查集可以理解为一种解决问题的思想,将有关系的元素合并为一个集合。LeetCode 128. 最长连续序列LeetCode 200. 岛屿数量LeetCode 399. 除法求值...原创 2021-06-20 16:57:56 · 168 阅读 · 0 评论 -
algorithm: 归并排序/线段树/树状数组/平衡二叉搜索树
文章目录解题思路1解题思路2解题思路3解题思路4多种数据结构解决一道题目,我觉得这道题还是很不错的,所以将力扣上我的题解搬运博客上,数据结构的魅力多用多体会。327. 区间和的个数解题思路1本题解参考了官方题解,但是代码都是自己手写调试的。这道题目非常好,帮助复习了线段树和树状数组,以及学习了平衡二叉搜索树treap的实现方式。归并排序其实不仅仅可以用于排序,它还包含了一种区间合并的思想,两个小区间的合并将计算完的前缀数组做归并排序对于要合并的两个区间而言,右区间的值-左区间的值介于lowe原创 2021-04-21 00:06:28 · 112 阅读 · 0 评论 -
algorithm: Treap 平衡二叉搜索树
Treap是平衡二叉搜索树的一种实现,Treap是Tree和Heap的合成,既有二叉查找树BST的性质,又有堆的性质,所以既能维护排名,又保证是在O(logN)的深度。BST,即二叉查找树,是指对于任意节点,保证根左侧子树的所有节点比根小,右侧的所有节点比根大的树(没有相同节点)。而二叉搜索树很容易不平衡,例如不断插入一个递减的数组,则形成的二叉树是线性的。利用堆的性质,赋予每一个节点一个随机值,按照随机值维护堆的形状。于是我们需要一个操作,既能保持BST的性质,又能够将根节点与儿子替换,于是我们需要原创 2021-04-18 23:39:24 · 85 阅读 · 0 评论 -
算法:归并排序
归并排序不仅仅是一种排序方式,其包含区间合并的思想,某种程度上与线段树、树状数组有类似之处,这里列举两道可以使用归并排序解决的算法题目。327. 区间和的个数315. 计算右侧小于当前元素的个数...原创 2021-04-13 00:16:27 · 77 阅读 · 0 评论 -
algorithm: 回溯
理论上:一道算法题的不同结果可以用于比较的,都可以用回溯来解决,例如字符串的处理,题目中带有找出最…的字眼。回溯本质上就是尝试题目所有可能的解决方案 + 剪枝(常为记忆化搜索),所以回溯的解法通常可以看作通解,也很有可能效率不高310. 最小高度树从这一题 322. 零钱兑换可以看出有些记忆化搜索中,可以采用动态规划的方式。...原创 2021-04-11 15:45:42 · 78 阅读 · 0 评论 -
algorithm: 质数生成
编写hash函数需要判断质数,这里记录下~质数生成:1.欧几里得筛法:要得到2-n的所有质数,写下2-n的所有整数,numsfor i找到数列中最小的当前数x=nums[i],删掉所有x的倍数剩下的就是质数2.试除法:依次检验2-n-1能否有整除n的数对于n/2到n-1显然不能整除n,所以只需要2-n/2试除进一步优化,假设n可以被m整除 n=l*m m<sqrt(n) l>sqrt(n),那么是否不需要判断l了呢,l是大于sqrt(n)的数def prime原创 2021-04-01 17:41:26 · 792 阅读 · 0 评论 -
algorithm: 动态规划
动态规划是一种很奇妙的解题方式,刚开始接触发现很神奇,但是自己又解不出来,哈哈我认为动态规划的核心是定义状态和总结状态的变化关系先mark下后续补区间动态规划312. 戳气球486. 预测赢家664. 奇怪的打印机点位动态规划买卖股票时机系列309. 最佳买卖股票时机含冷冻期...原创 2021-03-30 22:46:13 · 74 阅读 · 0 评论 -
algorithm: 拓扑排序
对于拓扑排序的理论知识没有找到好的资料,不妨先通过两道题目理解一下最小高度树310. 最小高度树目前理解的拓扑排序是通过入度获取树的最内层节点,该题目实际上就是寻找树的最内层节点class Solution {public: vector<int> findMinHeightTrees(int n, vector<vector<int>>& edges) { vector<int> res; if(n==原创 2021-03-28 22:38:06 · 76 阅读 · 0 评论 -
algorithm: 线段树-实现(递归和非递归)
线段树是一种二叉搜索树线段树将一段区间[a,b]划分为一些单位区间,每个单位区间对应线段树的一个叶子节点。对于线段树中的每一个非叶子节点[a,b],它的左儿子区间[a,(a+b)/2],右儿子区间[(a+b)/2+1,b]...原创 2021-03-28 00:38:59 · 442 阅读 · 0 评论 -
算法:位运算
位运算在算法中占据重要一席,常见的位运算有取反 “~”并 “&”或 “|”异或 “^”一个值b位运算的性质有b^0=bb^1=~bb&1=bb&0=0b|0=b原创 2021-03-26 00:31:14 · 114 阅读 · 0 评论 -
算法: KMP
看了知乎的高赞解答,总结一下如何更好地理解和掌握 KMP 算法?判断字符串与模式字符串是否匹配,为了避免重复判断,需要借助部分匹配表(PMT),部分匹配表是通过计算其前缀和后缀字符串相同的最大长度获得,其作用是,例如我们判断到字符串s[i]!=p[j],则s[i]前PMT[j-1]位一定与与模式字符串的第0到PMT[j-1]相等。利用部分匹配表是计算的模式字符串当前长度的最大前缀和后缀,就能找到s字符串继续匹配的开始点,在代码中实际只需要变换j的值,从而继续匹配,实际j控制的是模式字符串的开始位置。原创 2020-12-06 23:42:41 · 88 阅读 · 0 评论 -
algorithm: linux题目
192. 统计词频写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。LeetCode 192. 统计词频awk '{for(i=1;i<=NF;i++){asso_array[$i]++;}};END{for(w in asso_array){print w,asso_array[w];}}' words.txt | sort -rn -k2cat words.txt | xargs -n1 | sort | uniq -c | sort -rn | awk原创 2020-09-14 22:07:05 · 213 阅读 · 0 评论 -
algorithm: Morris算法遍历二叉树
我们知道遍历二叉树可以通过迭代和递归中序遍历,这两种遍历使用O(H)的空间存储栈空间,时间复杂度O(N),Morris算法可以牺牲时间复杂度,空间复杂度为O(1).其实遍历二叉树最大的困难是在子节点遍历完如何回到父节点,并且父节点已经知道左节点遍历完成。比如上图,我们在遍历到节点3,如何回到节点4呢?用栈保存遍历的节点是一种方法,下面来看看Morris算法怎么实现的Morris实际遍历两次,第一次遍历节点 8,标记左子树的最右节点 7,使遍历到 7 节点能回到父节点 8第一次遍历左子树原创 2020-06-20 23:12:05 · 376 阅读 · 0 评论 -
algorithm: 十种排序算法
先写三种,后面更新class Sort{public: //1.冒泡,比较相邻的元素,每次将最大的数移到后面 void maopao(vector<int> &nums){ for(int i=0;i<nums.size()-1;i++){ for(int j=0;j<nums.size()-i-1;j++){ if(nums[j]>nums[j+1]){原创 2020-06-17 17:00:10 · 301 阅读 · 0 评论 -
algorithm: 柱状图中最大的矩形
84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10这道题有多种...原创 2020-03-27 15:55:27 · 109 阅读 · 0 评论 -
算法: 字典序(二进制排序)
遇到一道算法题的解法,比较难理解,这里记录一下算法原题是给定正整数n和k,返回 1 … n 中所有可能的 k 个数的组合。这道题可以采用回溯法来解决,但是这里我们看下第二种方法:字典序 (二进制排序) 组合,我们可以将这个组合看做一个二进制的排序,如下图,只要我们将k位的二进制排序完成,就能得到所有的组合。这里的排序算法,有点难以理解,仔细研究,会发现很巧妙。class Solution...原创 2020-01-22 16:18:40 · 2253 阅读 · 2 评论 -
algorithm:基于C++和Python(四)
文章目录31.下一个排列C++版本Python版本31.下一个排列给出一个序列,求出该序列的下一个更大的排列,如果不存在,则排列成最小的排列1,2,3-> 1,3,21,3,2 -> 2,1,3C++版本Python版本Python代码没有考虑重复数值的情况。def nextPermutation(nums): n = len(nums) l = []...原创 2019-11-11 17:34:45 · 169 阅读 · 0 评论 -
algorithm:基于C++和Python(三)
21.合并两个链表将两个有序链表合并为一个新的有序链表并返回算法思想:按部就班写吧?C++版本Pythonclass ListNode(object): def __init__(self,val): self.val = val self.next = None#根据列表生成链表def createListNode(l): """ ...原创 2019-09-19 14:24:03 · 319 阅读 · 0 评论 -
algorithm: 基于C++和Python(二)
文章目录11.盛最多水的容器11.盛最多水的容器给定一组数据,每两对数据做木桶理论求能盛的最大的水,例如我们假设一组数据第一个数和第三个数,其面积为两者索引的差*两者中较小的数。算法思想:通过两端向中间叠进(不知道名字),可以有效降低时间复杂度;设置left和right变更的条件,同样可以减少判断次数,如当我们需要变更left时,变更后再比较left和left+1,如果索引left+1的值&...原创 2019-08-22 21:44:35 · 340 阅读 · 0 评论 -
algorithm: 基于C++和Python(一)
文章目录1.两数之和2.两数相加代码 Python和C++1.两数之和给定一个整数数组如[2,7,11,15]和一个目标值target=9,找出数组中和为目标值的两个数,返回结果索引[0,1]。算法思想:遍历数组数组的字典保存需要的值也就是target - numbers,当后面遍历的数字存在于该字典时满足条件返回,只需遍历一次数组。class Solution(object): ...原创 2019-05-06 17:21:31 · 667 阅读 · 0 评论