
算法、数据结构
幡然醒悟的研二狗-致敬所有受压迫的博士
天道有轮回,我爱撸代码,拒绝读博士。
从代码中理解数学原理~~~~
展开
-
二叉树的下一个结点
描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解释二叉树的下一个结点就是中序遍历的所给结点的下一个节点,此题由于还包含指向父节点的指针,所以可以将时间复杂度由O(n)降为O(h)情况一:所给结点有右子树,返回右子树的最左结点情况二:所给结点没有右子树,向上找,直到第一次找到当前节点是它的父节点的左...原创 2019-10-12 10:46:30 · 1104 阅读 · 0 评论 -
树的dfs和bfs
树的DFS有三种方式,分别为:前序遍历,中序遍历,和后序遍历。根据这个性质,我们很容易想到用堆栈完成DFS。遍历的时候我们将元素压栈,利用堆栈后进先出的性质来实现不同的遍历。BFS,即广度优先遍历,层次遍历。它时沿着树的宽度进行遍历,从第一层直到最后一层,一直到遍历完树中所有的节点。对于BFS,我们通常用队列来实现,队列先进先出的性质正好满足BFS的要求。参考链接...原创 2019-09-15 11:09:12 · 1894 阅读 · 0 评论 -
推荐系统实战
github链接博客链接原创 2019-09-08 12:39:56 · 1175 阅读 · 0 评论 -
平均查找长度
不要记那个近似公式参考链接开放定址法和拉链法的平均查找长度原创 2019-09-08 12:21:28 · 2066 阅读 · 0 评论 -
数值的整数次方
和leetcode50题思路一毛一样题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0# -*- coding:utf-8 -*-class Solution: def Power(self, base, exponent): # write code he...原创 2019-09-01 17:07:08 · 1100 阅读 · 0 评论 -
python实现比特位计数
leetcode338是它的升级版,限定的是非负数。此题可以为负数。技术处理:因为python的int是无线精度的,c++的int是32为的,所以python的负数相当于前面有无限个1,要对python的负数做处理class Solution: def NumberOf1(self, n): # write code here # 非负整数的题是l...原创 2019-09-01 15:26:49 · 1856 阅读 · 0 评论 -
会员333Tleetcode 树形dp
给定一个二叉树,找到其中最大的二叉搜索树(BST)子树,其中最大指的是子树节点数最多的。注意:子树必须包含其所有后代。示例:输入: [10,5,15,1,8,null,7]10/ \5 15/ \ \1 8 7输出: 3解释: 高亮部分为最大的 BST 子树。返回值 3 在这个样例中为子树大小。进阶:你能想出用 O(n) 的时间复杂度解决这个问题吗cla...原创 2020-05-30 15:19:43 · 1160 阅读 · 0 评论 -
二叉树最大最小值
树形dp思想,其实很多递归的题得弄明白每层需要什么样的信息。回溯就是每层可能不满足条件,不要怕自己coding,其实就这样# 函数名请忽略,没有找到相应题class Solution: def largestValues(self, root: TreeNode) -> List[int]: # 终止条件子树为空 if not root: ...原创 2019-08-22 20:49:00 · 2303 阅读 · 0 评论 -
HTTP请求状态码
HTTP状态码分类HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:HTTP状态码分类分类 分类描述1** 信息,服务器收到请求,需要请求者继续执行操作2** 成功,操作被成功接收并处理3** 重定向,需要进一步的操作以完成请求4** 客户端错误,请求包含语法错误或无法完成请求5** 服务器错误,服务器在...原创 2019-08-22 15:31:37 · 1093 阅读 · 0 评论 -
python状态压缩实现三角形的最小路径和
如题 leetcode 120 题代码:class Solution: def minimumTotal(self, triangle: List[List[int]]) -> int: # 三角形的当前行的列数和行数相等 所以状态压缩到m行也就是最后一行的列数 # 状态压缩后只能从最后一行开始求,不能从第一行开始求 # 上一行的一...原创 2019-08-13 11:14:27 · 1310 阅读 · 0 评论 -
回溯(组合总和讲的最好的一个)
写在前面:做搜索、回溯问题的套路是画图,代码其实就是根据画出的树形图写出来的。那么如何画图呢?根据题目中的用例,画一个图,因为是搜索,因此呈现的是一个树形结构图,并且在这个树形结构中会体现出递归结构。根据题目中的用例,比对自己画图的结果和题目的结果的差异,如果一样,说明我们的分析没有错;如果不一样,说明我们的分析有误,一定有哪一个环节漏掉了或者分析错误,根据找到的问题调整算法。力扣链接...原创 2019-09-17 20:41:53 · 1391 阅读 · 0 评论 -
GBDT不错的文章
GBDT原创 2019-09-15 17:30:58 · 1203 阅读 · 0 评论 -
股票买卖121,122,123
1 最多买卖一次class Solution: def maxProfit(self, prices: List[int]) -> int: # 最多买卖股票一次 # 第二维0代表:没有买 1代表:买了还没卖 2代表:买了又卖 if not prices: return 0 res = 0 profi...原创 2019-09-17 21:45:27 · 1407 阅读 · 0 评论 -
两个字符串的最长公共子串和最长公共子序列
最长公共子串最长公共子序列原创 2019-10-11 15:45:22 · 1232 阅读 · 0 评论 -
L1和L2正则
l1、l2l2总述l1、l2各种范式原创 2019-09-27 21:37:16 · 1092 阅读 · 0 评论 -
python and和or
A or B: A 为真则返回A;A为假则返回B;A真就不看B了(短路特性)A and B: A为假则返回A; A为真则返回B;A假就不看B了(短路特性)解决1+2+3+…+n不用乘除以及if等条件求和,可以用加减# -*- coding:utf-8 -*-class Solution: def Sum_Solution(self, n): # write code...原创 2019-09-27 14:59:06 · 1170 阅读 · 0 评论 -
二叉树和为某一值的路径
此题的路径是从根到叶子节点,包含这两个本身前序非递归class Solution: # 返回二维列表,内部每个列表表示找到的路径 def FindPath(self, root, expectNumber): # write code here # 必须根到叶节点,包括根和叶子节点 # 前序遍历非递归法 if ro...原创 2019-09-27 14:34:41 · 1174 阅读 · 0 评论 -
旋转数组的最小数字
思路:画图首先将旋转后等于nums[0]的部分清空,代码中就是指针右移然后比较清空后的首尾,如果旋转部分全是等于nums[0]的则直接返还nums[0],否则就对更新后的首尾二分,找到最开始小于nums[0]的那个。# -*- coding:utf-8 -*-class Solution: def minNumberInRotateArray(self, rotateArray)...原创 2019-09-26 15:47:30 · 1058 阅读 · 0 评论 -
力扣23合并k个排序链表
不用堆排序,分治可以做到O(1) 复杂度class Solution: def mergeKLists(self, lists: List[ListNode]) -> ListNode: # k个链表两两合并一次变成k/2个链表, # 然后再两两合并一次变成k/4个链表。。。合并logk次到只有一个链表 # 每次合并都是需要n个结点遍...原创 2019-09-24 17:07:12 · 1248 阅读 · 0 评论 -
leetcode接雨水42T
思路1、一直更新从0到当前left左侧的height的最大值,如果当前left对应的height值小于左侧最大值则储蓄雨水。大于等于则更新最大值,left指针右移。2、一直更新从len(height)-1到right右侧的height最大值,如果当前right对应的height值小于右侧最大值则储蓄雨水。大于等于则更新最大值,right左移3、注意1和2是同时进行的,至于height[lef...原创 2019-09-24 14:32:46 · 1124 阅读 · 0 评论 -
链表翻转递归法
class Solution: # 返回ListNode def ReverseList(self, pHead): # 如果链表为空或者链表中只有一个元素 # 第一个条件针对链表整体为空的情况, # 递归的时候只会到第二个条件 if not pHead or not pHead.next: r...原创 2019-09-22 13:17:38 · 1121 阅读 · 0 评论 -
gbdt+lr
gbdt+lr实战gbdt_lr指导原创 2019-08-21 17:42:26 · 1146 阅读 · 0 评论 -
leetcode92T 翻转指定结点间的链表 以及k个一组翻转链表
代码:class Solution: def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode: # 找到m到n之间的链表,翻转即可。 if m == n: return head # 浅复制指向同一块地址 p = ...原创 2019-08-21 17:29:23 · 1082 阅读 · 0 评论 -
递归、回溯和DFS的区别
转 递归、回溯和DFS的区别 ...转载 2019-08-12 15:23:35 · 1279 阅读 · 0 评论 -
马拉车(manacher),KMP
manacher: '''这里面是利用manacher进一步做从后面添加最少的字串使其成为回文串,leetcode214T是在前面''' def longestPalindrome(self, s: str) -> str: def manacherStr(Str) -> List[str]: res = [0] * (len(S...原创 2020-05-30 15:19:16 · 1405 阅读 · 0 评论 -
最长递增子序列(LIS)不连续
很牛的一个方法,实现也牛逼‘’’给的实例[10, 11, 12, 13, 1, 2, 3, 4, 5]跟单调栈还有一点不同[10, 0, 0, 0, 0, 0, 0, 0, 0][10, 11, 0, 0, 0, 0, 0, 0, 0][10, 11, 12, 0, 0, 0, 0, 0, 0][10, 11, 12, 13, 0, 0, 0, 0, 0]# 单调栈是要全出来,而...原创 2020-05-30 15:17:13 · 1267 阅读 · 0 评论 -
几行python代码 实现leetcode 第50题 pow(x,n)
思路:分而治之实现O(logn)求解利用位运算,让它节省点常数时间代码:处理奇偶数是关键,那两行也可以调换顺序class Solution(object): def myPow(self, x, n): """ :type x: float :type n: int :rtype: float """...原创 2019-08-09 10:03:57 · 1160 阅读 · 0 评论 -
152 乘积最大子数组, 处理的巧妙
连续的处理很巧妙,借用了一个res处理,常看class Solution: def maxProduct(self, nums: List[int]) -> int: # 存放到当前索引的最大值,最小值, 状态定义成二维的好做 # 不要搞dp = [[0, 0]] * 2里面的[0, 0] 就是一个了,变化会有干扰的, 是浅拷贝 dp...原创 2020-05-30 15:18:03 · 1076 阅读 · 0 评论 -
python实现leetcode239题:滑动窗口最大值 基于单调队列实现线性时间,代码更新到几行,注释清晰
题目描述给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1]...原创 2019-08-06 18:36:10 · 1568 阅读 · 0 评论 -
python实现数据流中的第k大元素以及快排、堆排的经典实现
leetcode 703题设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。补充知识以及代码如下:'''维护一个k大小的小顶堆,放前K大的元素 实质是数组,从移除...原创 2019-08-05 22:31:40 · 1502 阅读 · 1 评论 -
leetcode 783题 二叉搜索树结点最小距离 python O(n)时间复杂度 O(1) 空间复杂度解法
问题描述给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。示例:输入: root = [4,2,6,1,3,null,null]输出: 1解释:注意,root是树结点对象(TreeNode object),而不是数组。给定的树 [4,2,6,1,3,null,null] 可表示为下图: 4 / \ 2 6 / \ ...原创 2019-07-31 12:24:10 · 1133 阅读 · 0 评论 -
python实现链表两两交换结点,非递归和递归实现
题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3思路总结1. 递归本人首先尝试非递归写法,其中用了head, head.next, head.next.next = head.next, head,...原创 2019-08-03 14:09:01 · 1588 阅读 · 0 评论 -
全排列下一个数 leetcode31
全排列 LeetCode31题全排列的顺序为字典序,是升序算法的过程从后往前遍历,找到紧邻的两个数中左边小于右边的左边的数a;再次从后往前遍历,找到第一个大于数a的数,交换在列表中位置;对a后面的数(不升序),取逆序。class Solution: def nextPermutation(self, nums: List[int]) -> None: ...原创 2019-07-24 21:31:40 · 1180 阅读 · 0 评论 -
python几行代码 利用后序递归思想实现树的最大最小深度
题目:求解二叉树的最大最小深度,即根节点(含)和叶子节点(含)之间的节点数最大,最少。其中最小深度求解复杂一丝儿~~代码:class Solution(object): def maxDepth(self, root): # 后序操作 def subDepth(root): if not root: ...原创 2019-08-09 16:39:01 · 1164 阅读 · 0 评论 -
O(n*sizeof(n)) -> O(n)实现比特位计数
问题描述给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?要求算法的空间复杂度...原创 2019-08-10 10:07:39 · 1090 阅读 · 0 评论 -
吹逼的top-k问题
BFPRT个人感觉是topk问题最吹逼的算法,最坏时间复杂度都是O(n)而快速选择算法的时间复杂度平均是O(n),最坏仍是O(n^2)好像上面两个的区别都是在pivot的选择上,快速选择是因为只考虑一半的元素。以上两个+快排+归并,都得搞懂才能去面试参考链接:BFPRT :https://zhuanlan.zhihu.com/p/31498036快速选择:https://zhuanlan...原创 2020-05-30 15:18:39 · 1149 阅读 · 0 评论 -
lr特征离散化
链接原创 2019-08-20 21:49:11 · 1393 阅读 · 0 评论 -
布隆过滤器
bloomfilter:一个很长的二进制向量和一系列映射函数它可以用于检索一个元素是否在一个集合中(在不一定在,不在肯定不在)优缺点:空间效率和查询效率远远超过一半算法;有一定的误识别率和删除困难布隆过滤器的应用1.网络爬虫 判断某个URL是否已经被爬取过2.K-V数据库 判断某个key是否存在比如Hbase的每个Region中都包含一个BloomFilter,用于在查询时快速判断...原创 2019-08-11 21:44:58 · 1052 阅读 · 0 评论 -
leetcode692T topk词频 时间复杂度(max(O(N), O(klogk)))
实现思想:O(N) 是bfprtO(klogk)是排序O(K)空间的字典,按值和键排序class Solution: def topKFrequent(self, words: List[str], k: int) -> List[str]: def fan(x): return -x def genKV(words, ...原创 2019-08-20 10:45:00 · 1221 阅读 · 0 评论 -
N皇后问题
class Solution: def solveNQueens(self, n: int) -> List[List[str]]: # 利用撇和捺剪枝,但是仍是指数级时间复杂度,而树形dp是节点数的时间复杂度 # 行作为dfs的层,所以只需要放列就行 def DFS(queens, xy_dif, xy_sum): ...原创 2019-08-23 17:42:29 · 1200 阅读 · 0 评论