leetcode
maershii
这个作者很懒,什么都没留下…
展开
-
leetcode 123 二叉树中的最大路径和,且打印对应的路径
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = .原创 2022-01-11 21:17:52 · 3572 阅读 · 0 评论 -
【算法】布隆过滤器
应用场景:网页黑名单系统;垃圾邮件过滤系统;爬虫的网址判断重复系统;容忍一定程度的失误率;对空间要求较严格;概念:布隆过滤器可以精确的代表一个集合,可以精确判断某一元素是否在此集合里。精确程度由用户的具体设计决定,做到100%的精确是不可能的。其优势在于:利用很少的空间可以做到精确率较高。原理和过程:Bloom Filter用途: 判断一个元素是否在一个...原创 2018-11-24 09:39:46 · 398 阅读 · 0 评论 -
【算法】蓄水池抽样
例题:有一个机器按自然数序列的方式吐出球,1号球,2号球......。现有一个袋子,袋子里最多只能装下k个球,并且除袋子以外没有更多的空间,球扔掉不能放回。设计一种选择方式,使得当机器吐出第N号球时,袋子中的球数是k个,同时可以保证从1号球到N号球中的每一个被选中进袋子的概率都是k/N。具体例子:有一个只能装下10个球的袋子:当吐出100个球时,袋子里有10个球,且1~100号球中每个...原创 2018-11-25 20:15:51 · 233 阅读 · 0 评论 -
【算法】卡特兰数
相关问题:1. 给定n对括号,求合法的排列个数?2. n个数进出栈的顺序有多少种?(进栈是左括号,出栈是右括号)3. 2n个人买票,n个人拿5块钱,n个人拿10块钱,票价为5块钱,每人买一张票,且售货员手中无零钱,求合法的排队顺序?(5块钱是左括号,10块钱是右括号)4. n个高矮不同的人排成两排,每排从矮到高,并且第二排的人比对应的第一排的人高,求排列方式?(0表示第一排,1...原创 2018-11-25 09:46:49 · 315 阅读 · 0 评论 -
【算法】博弈论
1. 巴什博奕只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取m个。最后取光者得胜。方法:最后取光者赢:n%(m+1) == 0 ,后手胜;最后取光者输:(n-1)%(m+1) == 0 ,后手胜;例题:本游戏是一个二人游戏,有一堆石子一共有n个,两人轮流进行,每走一步可以取走1…m个石子,最先取光石子的一方为胜,如果游戏的双方使用的都是最优策略,请输...原创 2018-11-27 11:55:34 · 387 阅读 · 0 评论 -
买卖股票最佳时机(I II III IV 冷冻期,手续费)
共6个问题:买卖股票最佳时机买卖股票最佳时机 II买卖股票最佳时机 III买卖股票最佳时机 IV最佳买卖股票时机含冷冻期买卖股票最佳时机含手续费分析:只允许一次交易的最大收益(一次买进卖出)动态规划: dp[i] = max(dp[i-1], prices[i] - minval); 允许多次交易的最大收益(多次买进卖出)贪心算法:只要盈利就交易; 只允许有两次...原创 2018-12-21 20:25:57 · 309 阅读 · 0 评论 -
【leetcode】输出一个数的所有质数因子
trick:不用真的找出所有质数,从2开始循环判断能否整除,直到除不尽2,再判断3,然后因为之前判断过2了,其实到4的时候肯定不会被整除了。因此以后并不会有被非质数整除的情况。 def findPrime(n): if n <= 1: return i = 2 res = [] while n > 1: if n%...原创 2018-12-29 07:57:55 · 5734 阅读 · 3 评论 -
【leetcode】深度优先遍历之孤岛问题
岛屿的个数leetcode 200. 岛屿的个数: https://leetcode-cn.com/problems/number-of-islands/思路: DFS,走过一个要改成-1。class Solution: def numIslands(self, grid): """ :type grid: List[List[str]] ...原创 2019-01-17 19:45:35 · 3393 阅读 · 0 评论 -
【leetcode】广度优先遍历BFS
一般使用队列,经典题型:1. 树的层次遍历及其延伸2. 完全平方数https://leetcode-cn.com/problems/perfect-squares/submissions/class Solution: def numSquares(self, n): """ :type n: int :rtype: int...原创 2019-01-18 14:15:08 · 383 阅读 · 0 评论 -
【leetcode】二分查找
二分搜索在有序数组中查找指定值。一般二分搜索需要注意两个点:循环条件是l<r 还是 l<= r;更新r值时,是r=mid还是r= mid-1;具体问题具体分析。#二分搜索源代码def bisearch(arr, num): l = 0 r = len(arr)-1 while l <= r: mid = int((l+r)/...原创 2019-01-19 16:14:23 · 292 阅读 · 0 评论 -
【算法】链表
1. 将含有random指针的链表复制一份第一遍循环:将每个节点复制一份放在原节点后面;第二遍循环:每个新复制节点的random指向的是“其对应原节点的random节点的下一个节点”,如此得到一个double的大链表;第三遍循环:将大链表拆成两份。class Solution: # 返回 RandomListNode def Clone(self,pHead):...原创 2018-11-16 17:32:47 · 123 阅读 · 0 评论 -
【算法】查找算法
1. 顺序查找无序序列or顺序序列时间复杂度:O(n)ASL = (n+1)/2def search(arr, a): for i in range(len(arr)): if arr[i] == a: return i return -12. 二分查找顺序序列时间复杂度:O()。比较次数:a < ...原创 2018-11-05 20:25:20 · 238 阅读 · 0 评论 -
【算法】括号问题
1. 合法括号深度一个合法的括号匹配序列有以下定义:1、空串""是一个合法的括号匹配序列2、如果"X"和"Y"都是合法的括号匹配序列,"XY"也是一个合法的括号匹配序列3、如果"X"是一个合法的括号匹配序列,那么"(X)"也是一个合法的括号匹配序列4、每个合法的括号序列都可以由以上规则生成。例如: "","()","()()&原创 2018-10-31 10:00:34 · 871 阅读 · 0 评论 -
【算法】LCS最长公共子串DP
基础题型:最长共公共子序列(不连续)lcs 最长公共子串(连续)lcstr 最长回文子序列(不连续)lps 最长回文子串(连续)lpstr拓展题型平方串(lcs拓展) 给定一个字符串,问是否能通过添加一个字母将其变为回文串(lcstr拓展) 1. 最长公共子序列LCS输入:‘abcdef’,‘agbcje’输出:‘abce’#该版本是返回最长公共子串...原创 2018-10-31 13:55:59 · 319 阅读 · 0 评论 -
【算法】子串和(乘积)最大DP
1. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。nums中有正有负。class Solution: def maxSubArray(self, nums): res = [0 for i in range(len(nums))] res[0] = nums[0] ...原创 2018-10-31 16:09:50 · 416 阅读 · 0 评论 -
【算法】斐波那契数列vs卡塔兰数列DP
1. 斐波那契数列公式:应用:爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?class Solution: def climbStairs(self, n): if n <= 1: return 1 res = [0 for i i...原创 2018-10-30 14:14:28 · 302 阅读 · 0 评论 -
【算法】纸币面额拼凑DP
给你六种面额1、5、10、20、50、100元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0-10000的非负整数)的不同组合的个数。def fun(n): money = [1,5,10,20,50,100] dp = [0 for i in range(n+1)] # dp[i]指n为i时的拼凑方法数 dp[0] = 1 #当n为0是,方法数为1...原创 2018-11-03 09:56:19 · 948 阅读 · 0 评论 -
【算法】排序
1. 冒泡排序def bubbleSort(arr): for i in range(len(arr)-1): for j in range(len(arr)-1-i): if arr[j] > arr[j+1]: arr[j],arr[j+1] = arr[j+1], arr[j] ...原创 2018-11-06 14:25:25 · 117 阅读 · 0 评论 -
【算法】树
二叉树深度优先遍历:先序遍历,中序遍历,后序遍历的递归与非递归。二叉树广度优先遍历:层次遍历。class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None#递归前序def preTran(head): if ...原创 2018-11-04 11:18:03 · 111 阅读 · 0 评论 -
【算法】全排列
1.全排列给定一个没有重复数字的序列,返回其所有可能的全排列#递归,取一个数放在第一个位置,然后求剩下数据的全排列,以此类推class Solution: def permute(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ ...原创 2018-11-05 11:11:43 · 842 阅读 · 0 评论 -
【算法】顺时针打印矩阵
顺时针打印矩阵的实现:打印第一行-> 删除第一行-> 逆时针旋转矩阵,重复该过程知道矩阵为空。note:顺时针 = 上下翻转->转置 逆时针 = 转置-> 上下翻转def printMatrix(M): res = [] while M != []: res += M[0] M = M[1:]...原创 2018-11-13 09:15:32 · 632 阅读 · 0 评论