科学刷题
文章平均质量分 69
我就是个小丑
数学工具构造器
这个作者很懒,什么都没留下…
展开
-
【科学刷题】并查集
算法笔记 - 并查集 - 目录算法笔记 - 并查集 - 定义微软10-28下午的二面考了并查集,没写出来,羞耻今天写3道题,省份的数量,冗余连接,打砖块547. 省份数量class UnionSet{private:int cnt;vector<int> parent;public: UnionSet(int n):cnt(n){ for(int i=0;i<n;++i) parent.emplace_back(i); } int原创 2021-11-01 12:25:29 · 278 阅读 · 0 评论 -
【科学刷题】模式匹配专题
44. 通配符匹配class Solution: def isMatch(self, s: str, p: str) -> bool: m, n = len(s), len(p) dp = [[False] * (n + 1) for _ in range(m + 1)] # 忘了 dp[0][0] = True for j in range(1, n + 1): # * 能和 空串 匹配原创 2021-06-13 12:39:59 · 272 阅读 · 0 评论 -
【科学刷题】数据结构的综合应用
716. 最大栈双端队列 + 平衡树LRU,LFU,数据流中位数研究一下字节面试题381. O(1) 时间插入、删除和获取随机元素 - 允许重复这题还有配套的原创 2021-05-29 14:20:35 · 274 阅读 · 0 评论 -
【科学刷题】完全吃透所有树相关的算法题
1 二叉树2 完全二叉树3 二叉搜索树原创 2021-05-29 10:56:08 · 1280 阅读 · 0 评论 -
【科学刷题】最长公共子序列/子串(LCS)
674. 最长连续递增序列class Solution: def findLengthOfLCIS(self, nums: List[int]) -> int: n = len(nums) dp = [1] * n for i in range(1, n): if nums[i] > nums[i - 1]: dp[i] = dp[i - 1] + 1 return.原创 2021-05-23 16:10:36 · 353 阅读 · 0 评论 -
【科学刷题】完结篇汇总
完结【科学刷题】3种方法花式求解 X 的平方根【科学刷题】最大和与最大乘积问题,从一维到二维【科学刷题】子数组和问题【科学刷题】树的子结构与子树判断【科学刷题】彻底搞定二分算法所有题型部分完结【科学刷题】字符串(大数)的加减乘法【科学刷题】完全吃透回溯法所有题型正在施工【科学刷题】完全吃透所有排序算法【科学刷题】最长递增子序列:从1维到3维【科学刷题】完全吃透所有链表题【科学刷题】跳台阶:难度逐渐变态【科学刷题】归并排序应用题...原创 2021-05-23 00:10:49 · 630 阅读 · 2 评论 -
待移植LeetCode代码块
文章目录骚题目蓄水池抽样Alias SamplingAUC曲线计算1363. 形成三的最大倍数403. 青蛙过河不同路径(考虑障碍物的DP)股票难题315. 计算右侧小于当前元素的个数255. 验证前序遍历序列二叉搜索树376. 摆动序列582. 杀掉进程718. 最长重复子数组剑指 Offer 41. 数据流中的中位数516. 最长回文子序列97. 交错字符串416. 分割等和子集312. 戳气球583. 两个字符串的删除操作234. 回文链表726. 原子的数量405. 数字转换为十六进制数1. 两数之原创 2021-05-09 22:55:03 · 353 阅读 · 0 评论 -
【科学刷题】最长递增子序列:从一维到三维
354. 俄罗斯套娃信封问题原创 2021-05-21 09:54:32 · 271 阅读 · 0 评论 -
【科学刷题】3种方法花式求解 X 的平方根
文章目录1. 梯度下降2. 牛顿迭代3. 二分面试官:好,那我们来做个算法题吧(悲剧开始了),求x开方面试官:你有什么思路我:二分面试官:除了二分呢我:牛顿法(给自己挖坑了,应该答牛顿迭代法)面试官:写下牛顿法的公式我:不会面试官:牛顿法能用的条件我:有二阶导面试官:用梯度下降求这题。。。害,当时脑子进水了,掰扯了很久,最后还没写出来(怕是凉了T_T)1. 梯度下降设C=9C=9C=9,求C\sqrt{C}C,那么等同于求y=x2−Cy=x^2-Cy=x2−C的零点要么求函原创 2021-05-17 22:43:20 · 643 阅读 · 0 评论 -
【科学刷题】取值小于n的n个数专题
※ 41. 缺失的第一个正数41. 缺失的第一个正数缺失的第一个正数这题的hash法我看懂了,就是没时间写注释class Solution: def firstMissingPositive(self, nums: List[int]) -> int: n = len(nums) for i in range(n): if nums[i] <= 0: nums[i] = n + 1原创 2021-05-11 09:04:08 · 338 阅读 · 0 评论 -
【科学刷题】最长递增子序列(LIS):从1维到3维
300. 最长递增子序列300. 最长递增子序列n2n^2n2class Solution: def lengthOfLIS(self, nums: List[int]) -> int: n = len(nums) dp = [1] * n ans = 0 for i in range(1, n): for j in range(i): if nums[i] >原创 2021-05-11 09:00:31 · 379 阅读 · 1 评论 -
【科学刷题】并查集
582. 杀掉进程582. 杀掉进程并查集考虑一种极端情况,数的结构类似链表,那么时间复杂度直接飙到N2N^2N2,就TLEhashmap并查集的话,如果某个结点不存在,如x not in parent,可以直接让parent[x]=x,然后返回x,这样连初始化都免了class Solution: def killProcess(self, pid: List[int], ppid: List[int], kill: int) -> List[int]: resu原创 2021-05-11 08:23:07 · 252 阅读 · 0 评论 -
【科学刷题】滑动窗口
3. 无重复字符的最长子串滑动窗口class Solution {public: int lengthOfLongestSubstring(string s) { set<char> window; // ans 应该初始化为0而不是负数,以适应s为空的情况 int l = 0, ans = 0; for (int r = 0; r < s.size(); ++r) { char c =原创 2021-05-11 08:22:03 · 294 阅读 · 0 评论 -
【科学刷题】动态规划
403. 青蛙过河403. 青蛙过河时间复杂度: O(N2)O(N^2)O(N2)class Solution: def canCross(self, stones: List[int]) -> bool: mapper={} for stone in stones: mapper[stone]=set() mapper[0].add(0) for stone in stones:原创 2021-05-11 08:22:41 · 620 阅读 · 0 评论 -
【科学刷题】归并 / 归并排序 的各种应用
315. 计算右侧小于当前元素的个数315. 计算右侧小于当前元素的个数其实和逆序对差不多,就是改为对index排序(要记录下标)和逆序对一样,在归并的统计区做数据统计,其他基本不变class Solution: def countSmaller(self, nums: List[int]) -> List[int]: counts = [0] * len(nums) index = [i for i in range(len(nums))]原创 2021-05-11 08:21:41 · 638 阅读 · 0 评论 -
【科学刷题】DFS与BFS
582. 杀掉进程582. 杀掉进程并查集考虑一种极端情况,数的结构类似链表,那么时间复杂度直接飙到N2N^2N2,就TLEhashmap并查集的话,如果某个结点不存在,如x not in parent,可以直接让parent[x]=x,然后返回x,这样连初始化都免了class Solution: def killProcess(self, pid: List[int], ppid: List[int], kill: int) -> List[int]: resu原创 2021-05-11 08:21:32 · 325 阅读 · 0 评论 -
【科学刷题】子数组和问题
题记穷则前缀哈希达则滑动窗口---鲁迅文章目录前缀哈希560. 和为K的子数组(统计子数组个数)325. 和等于 k 的最长子数组长度(统计子数组最大长度)523. 连续的子数组和滑动窗口209. 长度最小的子数组前缀哈希560. 和为K的子数组(统计子数组个数)560. 和为K的子数组因为没有正整数的约束,无法用滑窗前缀和 + hash表class Solution: def subarraySum(self, nums: List[int], k: int) ->原创 2021-03-18 19:29:11 · 302 阅读 · 0 评论 -
【科学刷题】字符串(大数)的加减乘法
文章目录415. 字符串相加字符串相减43. 字符串相乘415. 字符串相加415. 字符串相加class Solution: def addStrings(self, num1: str, num2: str) -> str: l1 = len(num1) l2 = len(num2) i1 = l1 - 1 i2 = l2 - 1 carry = 0 base = 10 a原创 2021-03-18 13:49:38 · 304 阅读 · 0 评论 -
【科学刷题】完全吃透所有链表题
文章目录1. 链表的各种花式反转1.1 完全反转1.2 部分反转1.3 K个一组反转2. 链表找环 + 链表相交2.1 普通链表找环 + 找环入口2.2 普通两个链表的交点82. 删除排序链表中的重复元素 II234. 回文链表23. 合并K个升序链表1. 链表的各种花式反转1.1 完全反转剑指 Offer 24. 反转链表迭代class Solution: def reverseList(self, head: ListNode) -> ListNode: p原创 2021-05-10 10:16:18 · 453 阅读 · 0 评论 -
【科学刷题】跳台阶:难度逐渐变态
70. 爬楼梯70. 爬楼梯class Solution: def climbStairs(self, n: int) -> int: dp=[0]*(n+1) dp[0]=dp[1]=1 for i in range(2, n+1): dp[i]=dp[i-1]+dp[i-2] return dp[n]TODO: 常数时间复杂度变态跳台阶:剑指Offer(九):变态跳台阶f(n)=2f(n−原创 2021-05-10 10:15:39 · 315 阅读 · 0 评论 -
【科学刷题】回文题
7. 整数反转7. 整数反转class Solution {public: int reverse(int x) { int ret=0; while(x!=0){ int pop=x%10; x/=10; if(ret>INT_MAX/10 ||(ret==INT_MAX && pop>7)) return 0; if(ret<IN原创 2021-05-10 10:15:28 · 312 阅读 · 0 评论 -
【科学刷题】接雨水:从1维到2维
42. 接雨水42. 接雨水DPclass Solution: def trap(self, height: List[int]) -> int: sum = 0 n = len(height) max_left = [0] * n max_right = [0] * n for i in range(1, n - 1): max_left[i] = max(max_left[i原创 2021-05-10 10:14:48 · 383 阅读 · 0 评论 -
【科学刷题】完全吃透所有栈相关的算法题
20. 有效的括号20. 有效的括号class Solution: def isValid(self, s: str) -> bool: stack=collections.deque() mapper={ ')':'(', '}':'{', ']':'[', } for c in s: if c in mapper:原创 2021-05-10 10:14:37 · 515 阅读 · 0 评论 -
【科学刷题】区间专题
56. 合并区间56. 合并区间二刷 默都默不出class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: intervals.sort(key=lambda x:x[0]) res=[] for itv in intervals: if res and res[-1][1]>=itv[0]: # >=原创 2021-05-10 10:14:27 · 383 阅读 · 0 评论 -
【科学刷题】海量数据处理
位图法原创 2021-05-09 08:07:46 · 271 阅读 · 0 评论 -
【科学刷题】贪心
135. 分发糖果官方题解todo: 默写到会为止class Solution: def candy(self, ratings: List[int]) -> int: ret = 1 dec = 0 pre = 1 inc = 1 # inc只在两个地方使用,一个是用来记录pre的值,一个是和dec进行比较 N = len(ratings) for i in range(1, N):原创 2021-05-09 05:56:15 · 396 阅读 · 0 评论 -
【科学刷题】完全吃透所有排序算法
文章目录1 十大经典排序算法1.1 插入类排序1.1.1 直接插入排序1.1.2 二分插入排序1.1.3 shell排序1.2 选择类排序1.2.1 简单选择排序1.2.2 堆排序1.3 交换类排序1.3.1 冒泡排序1.3.2 快速排序1.3.2.1 递归版本1.3.2.2 非递归版本1.3.2.3 有两数组A B,数组内元素不可比较,数组间元素可比较,对两数组进行排序1.4 归并排序1.4.1 递归版本1.4.2 非递归版本1.5 非比较排序1.5.1 基数排序1.5.2 计数排序1.5.3 桶排序2.原创 2021-05-01 19:53:42 · 498 阅读 · 0 评论 -
【科学刷题】双指针
面试题 16.16. 部分排序分发糖果原创 2021-05-01 19:04:24 · 262 阅读 · 0 评论 -
【科学刷题】彻底搞定二分算法所有题型
文章目录1. 花式二分查找1.1 有序数组的查找1.1.1 普通二分查找1.1.2 lower_bound1.1.3 upper_bound1.1.4 三种方法串讲1.1.4.11.2 旋转数组1.2.1 查找旋转数组的某个数1.2.1.1 无重复1.2.1.2 有重复1.2.2 查找旋转数组的最小值1.2.2.1 无重复1.2.2.2 有重复1.3 二维有序数组的查找1.3.1 行元素有序、列元素有序1.3.2 展开成一维有序1.4 查找缺失的数字2. 中位数2.1 两个正序数组的中位数2.2 数据流的中原创 2021-05-01 12:03:27 · 596 阅读 · 0 评论 -
【科学刷题】机器学习岗特有的算法题
文章目录1 手推公式与实现简单模型1.1 实现Logistic Regression1.2 实现Linear Regression1.3 实现Kmeans1.4 实现UserCF2 概率统计2.1 采样算法2.1.1 均匀分布采样:随机线型发生器2.1.2 用均匀分布生成高斯分布2.1.3 用高斯分布生成均匀分布2.1.4 蓄水池抽样2.1.5 Alias Sampling2.1.6 randM 生成 randN2.2 排列组合与古典概型2.3 几何概型2.4 期望方差3 高等数学3.1 梯度3.2 泰勒公原创 2021-04-13 22:24:43 · 647 阅读 · 2 评论 -
【科学刷题】完全吃透回溯法所有题型
文章目录1. 排列问题1.1 普通全排列1.2 要求去重的全排列1.3 泛化的A(n,m)全排列2 组合问题3 子集问题4 棋盘问题5 切割问题1. 排列问题在我们本科教材中(我不知道仙女你有没有读过类似的内容),回溯法最开始是【排列树】、【子集树】等内容,所以我们先从这方面开始说起。全排列,可以认为是对数组A进行随机Shuffle后,对解空间进行遍历的操作。时间复杂度与解空间规模都是O(N!)O(N!)O(N!)1.1 普通全排列46. 全排列class Solution: def p原创 2021-04-06 13:53:31 · 456 阅读 · 0 评论 -
【科学刷题】树的子结构与子树判断
文章目录1. 判断【树B】是否是【树A】的【子结构】/【子树】1.1 概念阐述1.2 完全匹配的情况1.3 部分匹配的情况2. 查找所有重复子树1. 判断【树B】是否是【树A】的【子结构】/【子树】1.1 概念阐述首先阐述一个概念:子结构匹配与子树匹配匹配:完全匹配就是A的子结构与B完全匹配部分匹配:部分匹配就是A的子结构与B部分匹配,A的子结构允许有与B不匹配的其他结构如何判断是【完全匹配】还是【部分匹配】呢?我们需要仔细读题:1.2 完全匹配的情况1.3 部分匹配的情况2. 查原创 2021-04-06 12:44:22 · 410 阅读 · 0 评论 -
【科学刷题】最大和与最大乘积问题:从1维到2维
文章目录1. 最大和1.1 一维最大和1.2 二维路径最大和2. 最大乘积2.1 一维最大乘积2.2 二维路径最大乘积1. 最大和1.1 一维最大和1.2 二维路径最大和2. 最大乘积2.1 一维最大乘积152. 乘积最大子数组这题的思路部分可以直接看题解题解 - 乘积最大子数组时间复杂度 O(N)O(N)O(N) ,空间复杂度 O(N)O(N)O(N)class Solution: def maxProduct(self, nums: List[int]) -> int:原创 2021-04-06 10:14:22 · 317 阅读 · 0 评论