- 博客(33)
- 收藏
- 关注
原创 算法之剑指offer题目总结
简介剑指offer中的题目是面试中考察的重点,本篇文章对这些题目进行总结,方便日后阅读。题目题目顺序参考 leetcode 中出现的顺序。1. 数组中重复的数字2. 二维数组中的查找 3. 替换空格 4. 从尾到头打印链表 5. 重建二叉树 6. 用两个栈实现队列 7. 斐波那契数列 8. 青蛙跳台阶问题 9. 旋转数组的最小数字 10. 矩阵中的路径 解析1. 数组中重复的数字题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有
2021-05-07 00:24:35
982
3
原创 算法之「组合总和」问题
简介本篇文章介绍「组合总和」各种变形题的解题思路,争取能够攻克所有组合数问题。题目39. 组合总和40. 组合总和 II216. 组合总和 III377. 组合总和 Ⅳ下面通过例子由浅至深详细讲解。所有例题均来自leetcode,所示代码均通过所有测试。解析39. 组合总和题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。
2021-04-24 14:24:38
2957
1
原创 算法多线程leetcode题目总结(多解法实现)
简介本文汇总了leetcode上多线程题目,并对每一道题进行多方法解答,并分析不同方法之间的优劣。文中示例代码为Java。题目1114. 按序打印 简单1115. 交替打印FooBar 中等1116. 打印零与奇偶数 中等1117. H2O 生成 中等以上题目均来自leetcode.解答1114. 按序打印题目描述我们提供了一个类:public class Foo { public void first() { print("first"); } public void
2021-04-20 19:16:33
1982
1
原创 算法之堆的应用(优先队列)
简介堆(Heap)是一个可以被看成近似完全二叉树的数组。树上的每一个结点对应数组的一个元素。除了最底层外,该树是完全充满的,而且是从左到右填充。—— 来自:《算法导论》堆包括最大堆和最小堆:最大堆的每一个节点(除了根结点)的值不大于其父节点;最小堆的每一个节点(除了根结点)的值不小于其父节点。堆常见的操作:HEAPIFY 建堆:把一个乱序的数组变成堆结构的数组,时间复杂度为 O(n)O(n)O(n)。HEAPPUSH:把一个数值放进已经是堆结构的数组中,并保持堆结构,时间复杂度为 O(log&nb
2021-04-19 00:27:17
273
原创 算法leetcode 彻底搞懂LRU和LFU缓存问题
简介LRU (Least Recently Used) 缓存,即在缓存容量达到上限的条件下,删除最久未使用过的数据,腾出空间存储新的数据。LFU (Least Frequently Used) 缓存,即在缓存容量达到上限的条件下,删除使用频率最少的数据,当使用频率相同时,删除最久未使用的数据。这两种缓存算法在实践中用得非常普遍,例如MySQL的内存数据页淘汰算法,Redis的淘汰策略等。例题1. T146. LRU缓存机制 中等2. T460. LFU缓存 困难以上题目均来自leetcod
2021-04-15 15:38:28
611
原创 算法之动态规划总结(11种DP类型,70道全部搞懂)
简介参考文章,将所有的DP问题分成11大类,本文将这些题目的解法进行探讨。所有题目均来自leetcode。题目1、线性 DP最经典单串:最长上升子序列最经典双串:最长公共子序列经典问题:三角形最小路径和最大子序和乘积最大子数组鸡蛋掉落(DP+二分)俄罗斯套娃信封问题打家劫舍系列: (打家劫舍3 是树形DP)打家劫舍打家劫舍 II股票系列:买卖股票的最佳时机买卖股票的最佳时机 II买卖股票的最佳时机 III买卖股票的最佳时机 IV
2021-04-08 10:16:35
33366
6
原创 算法之股票最佳时机系列问题(一次搞定6道股票问题)
简述本文旨在总结leetcode中遇到的一系列股票问题,分别详细阐述解决方法和各问题之间的区别。目录1. T121 买卖股票的最佳时机 简单2. T122 买卖股票的最佳时机 II 简单3. T123 买卖股票的最佳时机 III 困难4. T188 买卖股票的最佳时机 IV 困难5. T309 最佳买卖股票时机含冷冻期 中等6. T714 买卖股票的最佳时机含手续费 中等以上题目均来自leetcode题目####1. 买卖股票的最佳时机题目描述给定一个数组,它的第 i 个元素是
2021-04-07 11:38:31
837
原创 算法之N数之和
简述从例题的角度出发,一次解决所有的N数之和问题。例题目录1. T1. 两数之和 简单2. T15. 三数之和 中等3. T18. 四数之和 中等4. T16. 最接近的三数之和 中等5. T633. 平方数之和 中等6. T剑指 Offer 57. 和为s的两个数字 简单7. T剑指 Offer 57 - II. 和为s的连续正数序列 简单详细1. 两数之和题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,
2021-04-07 00:39:41
1801
1
原创 反转链表系列问题总结(多种解法多种题型)
简介反转链表是面试中常考问题,题型变化就那几种,包括整个链表的反转、范围反转等,本篇文章将这些问题放在一起进行讨论和总结,并对多种解法进行分析和对比,做到“一网打尽”!反转链表系列题目206. 反转链表 简单92. 反转链表 II 中等25. K 个一组翻转链表 困难以上题目均来自leetcode例题详细1、反转链表题目描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->
2021-03-25 15:18:13
420
原创 算法之单调栈的使用总结(含接雨水、柱状图等经典问题)
简述单调栈是栈内元素满足单调性的栈。假设需要维护一个单调递增栈,新元素进栈时,为了维护栈的单调性,需要弹出大于等于新元素的栈顶元素。对于数组中的元素,可以找到左侧/右侧第一个比它大/小的元素。寻找某一子数组,使得子数组中的最小值乘以子数组的长度最大。寻找某一子数组,使得子数组中的最小值乘以子数组所有元素和最大。例题目录1. 接雨水2. 柱状图中最大的矩形3. 最大宽度坡4. 表现良好的最长时间段5. 滑动窗口的最大值6. T456 132模式题目来源:leetcode例题
2021-03-24 19:06:57
261
原创 算法之旋转数组的查找问题整理(附二分查找模板)
介绍旋转数组的定义:排好序的数组 nums 在某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。相关问题153. 寻找旋转排序数组中的最小值寻找旋转数组中的最小值,数组中每个元素的唯
2021-03-20 15:31:04
257
原创 正则表达式 -- 一文成为正则老司机
概述本文是对(《正则表达式必知必会的》)[https://book.douban.com/subject/26285406/]的知识点梳理。本书总结了工程中常用的正则表达式用法,梳理出来便于日常查找和复习。文中所有正则表达式示例用python3中的re包作为演示。目录1 匹配单个字符本节主要讲单个字符通配符“.”和转义元字符“\”的使用。元字符:有特殊含义的字符,而不是字符本身含义。1.1 “.”的使用>>> import re>>> string =
2020-07-11 15:53:02
122
原创 leetcode 1388. 3n 块披萨 动态规划 python
leetcode 1388. 3n 块披萨 动态规划 python题目描述分析代码题目描述给你一个披萨,它由 3n 块不同大小的部分组成,现在你和你的朋友们需要按照如下规则来分披萨:你挑选 任意 一块披萨。Alice 将会挑选你所选择的披萨逆时针方向的下一块披萨。Bob 将会挑选你所选择的披萨顺时针方向的下一块披萨。重复上述过程直到没有披萨剩下。每一块披萨的大小按顺时针方向由循环数组...
2020-03-23 15:32:54
596
原创 leetcode 1383. 最大的团队表现值 Python
思路:先按efficiency进行降序排列,然后同时遍历排序后的speed和efficiency,在遍历过程中进行这几项操作:(1)将speed放入最小堆中,(2)保持堆的大小为k,(3)记录堆中speed之和,(4)寻找最大团队表现值。献上代码:import heapqclass Solution: def maxPerformance(self, n: int, speed...
2020-03-16 19:32:27
390
原创 re.sub 指定位置插入
先说下group()group()用来提出分组截获的字符串,举个例子:-group(0)就是匹配正则表达式整体结果- group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。re.sub其中“\1”表示括号内的部分...
2019-08-15 15:48:44
1751
原创 python中你可能不知道的事
for … else … 语句for循环是python编程中用到最大的语句,但是你可能不知道还有for…else…语句。说明在for循环之后使用else,可以用于判断for循环是自然结束还是break结束。举例不使用elsefor i in range(5): if i == 3: break print(i)>> 0>> 1>> 2...
2019-05-25 18:49:30
755
原创 LeetCode 215 数组中的第K个最大元素(Kth Largest Element in an Array) python实现
题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。分析:受启发于快速排...
2019-04-17 00:05:29
220
原创 [leetcode 543] 二叉树的直径 Diameter of Binary Tree (python)
题目描述给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。分析每个结点...
2019-04-06 15:00:05
172
原创 [leetcode 235 236] 二叉搜索树/二叉树的最近公共祖先 详解 (python)
题目描述见原网址:235. 二叉搜索树的最近公共祖先236. 二叉树的最近公共祖先分析LCA(Lowest Common Ancestors)问题,即最近公共祖先。235根据二分搜索树的性质,某个节点的左子树所有的值均小于该节点的值,而右子树所有节点的值均大于该节点的值,所以有三种情况:p、q 的值均小于节点的值,则在节点左子树中寻找公共祖先p、q 的值均大于节点的值,则在节点...
2019-04-06 14:35:22
715
原创 [Leetcode 349 350] 两个数组的交集 两个数组的交集 II (python)
题目描述349给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]350给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], n...
2019-04-05 00:24:11
127
原创 剑指offer 寻找二叉树的下一个节点 python
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。方法一:根据题意,既然是找出中序遍历的下一个节点,那就先进行中序遍历,将节点存于数组,返回要求节点的下一个节点即可,注意若要求节点为最后一个节点,则返回None。代码如下:# -*- coding:utf-8 -*-# clas...
2019-03-25 15:29:02
270
原创 剑指offer leetcode260 数组中只出现一次的数字 python实现两种方法
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。方法一:字典# -*- coding:utf-8 -*-class Solution: # 返回[a,b] 其中ab是出现一次的两个数字 def FindNumsAppearOnce(self, array): num_dict = dict(...
2019-03-21 17:40:13
278
原创 Leetcode 53 最大子序和(python)
给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。解法一:动态规划class Solution:...
2019-03-19 17:39:20
137
原创 Leetcode 21 合并链表(python)
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。方法一(非递归):# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution...
2019-02-17 13:30:50
109
原创 github fork出来的仓库同步upstream
首先clone fork出来的仓库到本地git clone git@github.com:123/456.git在 fork 的代码库中添加上游代码库的 remote 源git remote add upstream git@github.com:789/456.git获取原始仓库分支和对应的提交git fetch upstream在本地实现与upstream的同步gi...
2019-01-26 11:27:12
4780
原创 [LeetCode 94 144 145] 二叉树前序、中序和后序遍历总结(python)
给定一个二叉树,返回它的前序、中序 和后序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: 前序:[1,2,3]中序:[1,3,2]后序:[3,2,1]进阶:递归算法很简单,你可以通过迭代算法完成吗?本文分别使用递归和迭代算法实现。首先使用递归算法,就像上面所说,非常简单,几行代码搞定。前序...
2019-01-26 11:10:37
149
原创 python中@的用法
用法:定义函数的前一行,当解释器读到@符号时,跳过这一行,先读取下面的函数,然后将整个函数作为参数传递到@这一行的函数,再执行@这一行的函数。具体看下面的例子:def check_num(func): strs = func() if strs.isdigit(): print('输入为数字:{}...'.format(strs)) else: ...
2018-12-04 14:37:16
3377
1
原创 python time和datetime模块常用功能总结
import datetimeimport time# 当前时间,得到的是时间戳now_time = time.time()# 1543629912.6148438# 当前日期和时间now_datetime = datetime.datetime.today()# 2018-12-01 10:05:52.528162# 自定义格式now_format = '{:%Y-%m...
2018-12-01 13:57:52
994
原创 Leetcode 441. 排列硬币(Python)
你总共有n枚硬币,你需要将它们摆成一个阶梯形状,第k行就必须正好有k枚硬币。给定一个数字n,找出可形成完整阶梯行的总行数。n是一个非负整数,并且在32位有符号整型的范围内。示例 1:n = 5硬币可排列成以下几行:¤¤ ¤¤ ¤因为第三行不完整,所以返回2.示例 2:n = 8硬币可排列成以下几行:¤¤ ¤¤ ¤ ¤¤ ¤...
2018-07-26 10:46:44
1046
原创 Leetcode 413. 等差数列划分(python)
如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<...
2018-07-25 16:42:21
1041
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人