- 博客(70)
- 资源 (1)
- 收藏
- 关注
原创 剑指 Offer 25. 合并两个排序的链表(双指针)
题目描述文章目录双指针双指针# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: if not l
2021-10-26 19:33:52 216
原创 剑指 Offer 22. 链表中倒数第k个节点(双指针)
题目描述文章目录双指针双指针同时初始化两个指针指向head,接着先遍历node1,并记录下当前遍历到的节点个数记为n,当 n>kn > kn>k 时,开始遍历node2,注意这里要先判断是否遍历node2,再遍历node1,这样当node1遍历完毕时就能跳出循环# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x#
2021-10-19 20:10:59 227
原创 剑指 Offer 18. 删除链表的节点(双指针)
题目描述文章目录双指针双指针# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def deleteNode(self, head: ListNode, val: int) -> ListNode: if head.val ==
2021-10-19 19:20:19 194
原创 剑指 Offer 48. 最长不含重复字符的子字符串(动态规划、双指针、哈希表)
题目描述文章目录方法一:线性遍历(本质上是双指针)方法二:动态规划+哈希表方法三:双指针+哈希表方法一:线性遍历(本质上是双指针)使用一个变量current用于保存当前遍历的最长子串,会有两种情况:若当前字符不在current中,则将其添加至current若当前字符在current中,则先将至此形成的current的长度与最长子串长度res作比较,再将current中原有的这一字符剔除,并将当前字符添加至currentclass Solution: def lengthOfLonge
2021-10-07 21:29:36 162
原创 剑指 Offer 46. 把数字翻译成字符串(动态规划)
题目描述文章目录动态规划动态规划使用f(n)f(n)f(n)表示以当前第nnn个数结尾的翻译个数,则有两种情况:若第nnn个数与前一个数(n−1n-1n−1)组成的数≤25,则有一种新的组合方式;此外,当前这个数自身也是一种翻译方法。若第nnn个数与前一个数(n−1n-1n−1)组成的数>25,则只有当前这个数自身这一种翻译方法故可以推出递推公式为f(n)={f(n−1)+f(n−2),情形1f(n−1),情形2f(n) = \left\{\begin{array}{lr}f(n-
2021-10-07 18:48:47 110
原创 剑指 Offer 47. 礼物的最大价值(动态规划)
题目描述文章目录方法一:动态规划方法一:动态规划设置一个结果数组maxvalue_grid用于保存遍历至对应位置时的最大价值,则可得递推公式为maxvalue_grid[i][j]=max(maxvalue_grid[i][j−1],maxvalue_grid[i−1][j])+grid[i][j]maxvalue\_grid[i][j] = \max(maxvalue\_grid[i][j-1], maxvalue\_grid[i-1][j]) + grid[i][j]maxvalue_gr
2021-10-06 21:32:06 117
原创 剑指 Offer 42. 连续子数组的最大和(动态规划)
题目描述文章目录方法一:动态规划方法一:动态规划这里设定f(n)f(n)f(n)为包含当前第nnn个数num的最大连续子数组和,则可以写出递推公式为f(n)=max(num,f(n−1)+num)f(0)=nums[0]f(n) = \max(num, f(n-1)+num)\\f(0) = nums[0]f(n)=max(num,f(n−1)+num)f(0)=nums[0]注意这里递推公式中不是f(n)=max(f(n−1),f(n−1)+num)f(n) = \max(f(n-
2021-10-06 21:13:59 136
原创 剑指 Offer 63. 股票的最大利润(动态规划)
题目描述添加链接描述方法一:一次遍历参考解法class Solution: def maxProfit(self, prices: List[int]) -> int: minprice = 10**9 # 记录历史最低价 maxprofit = 0 # 记录最大利润 for price in prices: maxprofit = max(maxprofit, price - minprice)
2021-10-06 11:52:29 1732
原创 剑指 Offer 10- II. 青蛙跳台阶问题(动态规划)
题目描述动态规划这里可以推得递推公式为,要注意,当跳到f(n−2)f(n-2)f(n−2)时,本来可以有两种方式跳到f(n)f(n)f(n),但一步一步跳的方式与从f(n−1)f(n-1)f(n−1)跳到f(n)f(n)f(n)的方式重复,因此也只有一种方式f(n)=f(n−1)+f(n−2)f(0)=f(1)=1f(n)=f(n-1)+f(n-2)\\f(0)=f(1)=1f(n)=f(n−1)+f(n−2)f(0)=f(1)=1class Solution: def numWays
2021-10-06 11:31:09 104
原创 剑指 Offer 10- I. 斐波那契数列(快速幂)
题目描述文章目录方法一方法一用列表保存斐波那契数列,并在每一步取模,以防溢出class Solution: def fib(self, n: int) -> int: if n <= 1: return n F = [0, 1] for i in range(2, n+1): F.append((F[i-2] + F[i-1]) % (1e9+7)) # 要在这一步就取模,否则最后
2021-10-01 12:22:59 146
原创 剑指 Offer 28. 对称的二叉树
题目描述文章目录递归递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def isSymmetric(self, root: TreeNode) -> bool:
2021-09-29 12:28:14 97
原创 剑指 Offer 27. 二叉树的镜像
题目描述文章目录递归遍历+交换递归遍历+交换# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def mirrorTree(self, root: TreeNode) -> TreeN
2021-09-29 11:30:33 106
原创 剑指 Offer 26. 树的子结构(非常精妙)
题目描述参考解法学习这种递归的调用# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def isSubStructure(self, A: TreeNode, B: TreeNode) -&
2021-09-28 21:44:38 95
原创 剑指 Offer 32 - III. 从上到下打印二叉树 III
题目描述文章目录方法一方法二:层序遍历 + 双端队列(奇偶层逻辑分离)方法一依旧按每层从左到右的顺序保存和输出,另设置layer变量指示当前层数,若为偶数层则顺序,奇数层则逆序# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonec
2021-09-28 18:27:37 137
原创 剑指 Offer 32 - II. 从上到下打印二叉树 II(广度优先搜索)
题目描述文章目录方法一:使用队列保存每层列表方法一:使用队列保存每层列表# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def levelOrder(self, root: TreeNod
2021-09-28 17:05:59 118
原创 剑指 Offer 32 - I. 从上到下打印二叉树(广度优先搜索)
题目描述参考解法注意 collections 中的双端队列 deque() 的使用# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def levelOrder(self, root: Tr
2021-09-25 13:14:08 109
原创 剑指 Offer 50. 第一个只出现一次的字符
题目描述文章目录方法一:建立两个辅助列表,遍历字符串方法二:使用字典计数方法三:使用字典保存字符出现的索引方法一:建立两个辅助列表,遍历字符串class Solution: def firstUniqChar(self, s: str) -> str: uniq_list = [] repeat_list = [] for char in s: if char not in uniq_list and char no
2021-09-23 21:04:49 93
原创 剑指 Offer 53 - II. 0~n-1中缺失的数字
题目描述文章目录方法一:直接遍历方法二:二分法方法一:直接遍历class Solution: def missingNumber(self, nums: List[int]) -> int: for index, num in enumerate(nums): if index != num: return index return len(nums) # 遍历一遍后都存在,那么就是最后一个数不
2021-09-23 11:44:11 79
原创 剑指 Offer 53 - I. 在排序数组中查找数字 I
题目描述文章目录方法一:二分查找+遍历方法二:用两次二分查找方法一:二分查找+遍历先使用二分查找找到target第一次出现的索引,再从索引处开始遍历class Solution: def search(self, nums: List[int], target: int) -> int: index = self.binary_search(nums, target) if index == -1: return 0
2021-09-22 20:01:21 89
原创 剑指 Offer 03. 数组中重复的数字(学习原地交换解法)
题目描述文章目录方法一:建立一个列表保存出现过的值方法二:交换数组元素方法一:建立一个列表保存出现过的值class Solution: def findRepeatNumber(self, nums: List[int]) -> int: repeat_list = [] for num in nums: if num in repeat_list: return num el
2021-09-22 13:08:19 102
原创 剑指 Offer 05. 替换空格
题目描述方法一:遍历,构造辅助串class Solution: def replaceSpace(self, s: str) -> str: result = '' for i in s: if i == ' ': result += '%20' else: result += i return result方法二:使用pyt
2021-09-10 18:07:41 68
原创 剑指 Offer 35. 复杂链表的复制(链表、递归)
题目描述官方解法文章目录方法1:回溯 + 哈希表方法1:回溯 + 哈希表本题要求我们对一个特殊的链表进行深拷贝。如果是普通链表,我们可以直接按照遍历的顺序创建链表节点。而本题中因为随机指针的存在,当我们拷贝节点时,「当前节点的随机指针指向的节点」可能还没创建,因此我们需要变换思路。一个可行方案是,我们利用回溯的方式,让每个节点的拷贝操作相互独立。对于当前节点,我们首先要进行拷贝,然后我们进行「当前节点的后继节点」和「当前节点的随机指针指向的节点」拷贝,拷贝完成后将创建的新节点的指针返回,即可完成当前
2021-09-10 17:52:33 435
原创 剑指 Offer 24. 反转链表(学习递归)
题目描述官方解答文章目录方法1:迭代方法二:递归(巧妙)方法1:迭代# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def reverseList(self, head: ListNode) -> ListNode: c
2021-08-31 20:39:08 87
原创 剑指 Offer 06. 从尾到头打印链表(数组、递归)
题目描述文章目录方法1:列表倒置方法2:递归(学习)方法1:列表倒置# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def reversePrint(self, head: ListNode) -> List[int]:
2021-08-31 19:44:25 104
原创 剑指 Offer 30. 包含min函数的栈(非常巧妙)
题目描述官方解法面试题30. 包含 min 函数的栈(辅助栈,清晰图解)class MinStack: def __init__(self): self.A, self.B = [], [] def push(self, x: int) -> None: self.A.append(x) if not self.B or self.B[-1] >= x: self.B.append(x) d
2021-08-30 21:02:16 107
原创 剑指 Offer 09. 用两个栈实现队列
题目描述文章目录方法1(倒腾两次)方法2(官方解法,只用倒腾一次)方法1(倒腾两次)用两个栈来回倒腾class CQueue: def __init__(self): self.stack1 = [] # 临时栈 self.stack2 = [] # 主栈 def appendTail(self, value: int) -> None: # 若主栈空则直接放主栈 if len(self.sta
2021-08-30 20:32:38 94
原创 利用 selenium 自动在 canvas 上提交作业
参考:你用 Python 写过哪些有趣的脚本? - 景略集智的回答 - 知乎How to upload file with selenium (Python)?import timefrom selenium import webdriverfrom configparser import ConfigParser, ExtendedInterpolation# 读配置文件parser = ConfigParser(interpolation=ExtendedInterpolation(.
2021-02-02 19:19:43 658
原创 pandas中根据指定日期降采样
学习searchsorted的使用文章目录问题描述解决方案总结问题描述计算私募基金超额收益率。基金会披露一段时间的净值变动,但私募基金净值披露日期并不固定,可能每周披露一次或几天披露一次,因此,计算基准指数收益率也需要根据基金净值披露日期来计算。例如现在要分析明汯300指数增强产品超额收益,有如下数据:指数日度数据:解决方案首先提取出明汯产品净值披露日期mh_300_dates = pd.DatetimeIndex(mh_300.index)计算沪深300在净值披露周期的收益率.
2021-01-21 19:40:11 344
原创 LeetCode 剑指 Offer 11. 旋转数组的最小数字(Python、二分查找)
文章目录方法一:找非单调增的点题目描述方法一:找非单调增的点class Solution: def minArray(self, numbers: List[int]) -> int: smallest = numbers[0] for i in numbers: if i < smallest: return i return smallest...
2021-01-21 18:58:46 294 3
原创 LeetCode 剑指 Offer 05. 替换空格(Python)
文章目录方法一:简单遍历题目描述方法一:简单遍历class Solution: def replaceSpace(self, s: str) -> str: res = '' for i in s: if i == ' ': res += '%20' else: res += i return res...
2021-01-18 20:11:10 115
原创 LeetCode 剑指 Offer 04. 二维数组中的查找(Python、线性查找)
题目描述文章目录方法一:不断缩小范围方法二:线性查找方法一:不断缩小范围根据数组两个维度上的递增特性,可以总结出这样的算法,如果 matrix[i][j]>target,那么搜索的列范围就可以缩小到 j。class Solution: def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool: if not matrix: return False
2021-01-12 19:22:25 187
原创 LeetCode 152. 乘积最大子数组(Python、动态规划)
“最大子数组和”的变型题目描述动态规划思路和算法如果我们用 fmax(i)f_{\max}(i)fmax(i) 来表示以第 iii 个元素结尾的乘积最大子数组的乘积,aaa 表示输入参数 numsnumsnums,那么根据「53. 最大子序和」的经验,我们很容易推导出这样的状态转移方程:fmax(i)=maxi=1n{f(i−1)×ai,ai}f_{\max}(i) = \max_{i = 1}^{n} \{ f(i - 1) \times a_i, a_i \}fmax(i).
2020-12-24 20:35:08 732 1
原创 LeetCode 53. 最大子序和(Python、动态规划、分治(线段树))
学习分治(线段树) 的应用,同时记住递归的空间复杂度(栈的深度)题目描述文章目录方法一:动态规划方法二:分治方法一:动态规划思路和算法假设 nums 数组的长度是 nnn,下标从 000 到 n−1n - 1n−1。我们用 aia_iai 代表 nums[i]nums[i]nums[i],用 dp(i)dp(i)dp(i) 代表以第 iii 个数结尾的「连续子数组的最大和」,那么很显然我们要求的答案就是:max0≤i≤n−1f(i)\max_{0 \leq i \leq n - 1.
2020-12-24 14:35:08 462
原创 LeetCode 354. 俄罗斯套娃信封问题(Python、动态规划LIS、贪心+二分查找)
学习这一算法的思想,解决二维LIS问题,字节跳动原题,值得反复学习题目描述该问题为最长递增子序列的二维问题。我们要找到最长的序列,且满足 seq[i+1] 中的元素大于 seq[i] 中的元素。该问题是输入是按任意顺序排列的——我们不能直接套用标准的 LIS 算法,需要先对数据进行排序。我们如何对数据进行排序,以便我们的 LIS 算法总能找到最佳答案?我们可以在这里找到最长递增子序列的解决方法。如果您不熟悉该算法,请先理解该算法,因为它是解决此问题的前提条件。算法:假设我们知道了信封套娃顺.
2020-12-21 13:00:04 336
原创 第4章 决策树
文章目录4.2 划分选择4.2.1 信息增益信息熵4.2 划分选择4.2.1 信息增益信息熵假定当前样本集合 DDD 中第 kkk 类样本所占的比例为 pk(k=1,2,…,Yp_k (k=1,2, \dots,Ypk(k=1,2,…,Y
2020-12-20 21:44:07 187
原创 机器学习课后习题——第4章 决策树
文章目录4.14.24.34.1试证明对于不含冲突数据(即特征向量完全相同但标记不同)的训练集,必存在与训练集一致(即训练误差为 0) 的决策树。答:从原书p74的图4.2的决策树学习的基本算法可以看出,生成一个叶节点有三种情况:节点下样本 DDD 全属于同一类别 CCC ,则将当前节点作为 CCC 类叶节点。属性集 A=∅A=\varnothingA=∅ ,或者样本在当前属性集上取值相同。即特征用完了,或者样本在 AAA 上取值都相同。这时取 DDD 中最多的类作为此节点的类别标记。在某一
2020-12-20 21:01:12 2461
转载 股指期货高频数据机器学习预测(Python)
代码详见:股指期货高频数据机器学习预测文章目录问题描述问题分析数据分析数据集数据清洗数据预处理归一化PricesVolume时间信息对于预测值的处理噪声模型探索基于LSTM的RNN模型卷积神经网络全链接的神经网络模型利用XGBoost创建的模型随机回归森林模型模型之外问题描述通过对交易委托账本(订单簿)中数据的学习,给定特定一只股票10个时间点股票的订单簿信息,预测下20个时间点中间价的均值。评价标准为均方根误差。交易时间为工作日9:30-11:30,13:00-15:00,快照频率3秒。股.
2020-12-12 12:32:51 3505
原创 LeetCode 673. 最长递增子序列的个数(Python、动态规划)
题目描述思路与算法假设对于以 nums[i]nums[i]nums[i] 结尾的序列,我们知道最长序列的长度 dp[i]dp[i]dp[i],以及具有该长度序列的个数 count[i]count[i]count[i]。对于每一个 j<ij < ij<i 和一个 nums[j]<nums[i]nums[j] < nums[i]nums[j]<nums[i]如果 dp[j]≥[i]dp[j] \geq [i]dp[j]≥[i] ,那么我们就知道我们有 count[
2020-12-11 00:58:19 389
原创 利用神经网络预测链家网上海租房价格(Python)
代码详见:Predict-house-rent-with-neutral-network简介本项目利用Python的scrapy框架爬取链家网的上海市租房信息,利用pandas、numpy、matplotlib、seaborn、folium 、wordcloud 等库进行数据分析和可视化,通过one-hot编码和文本特征提取出120个训练特征,搭建3层神经网络对上海市租房价格进行预测。模块介绍爬虫爬虫框架如下:#mermaid-svg-1rGSvrVQ4pH6y5jW .label{font.
2020-12-10 20:19:37 1958 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人