From 8b8f41358569df90fcf2b64ef1a5f7b44998c1d1 Mon Sep 17 00:00:00 2001 From: labuladong Date: Wed, 11 Nov 2020 09:50:34 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BA=95=E9=83=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../动态规划之KMP字符匹配算法.md | 4 +- .../动态规划之博弈问题.md | 4 +- .../动态规划之四键键盘.md | 4 +- .../动态规划之正则表达.md | 3 +- ...态规划设计:最长递增子序列.md | 4 +- .../动态规划详解进阶.md | 4 +- 动态规划系列/团灭股票问题.md | 4 +- 动态规划系列/子序列问题模板.md | 6 ++- 动态规划系列/抢房子.md | 6 +-- 动态规划系列/最优子结构.md | 6 ++- 动态规划系列/最长公共子序列.md | 4 +- 动态规划系列/编辑距离.md | 4 +- .../贪心算法之区间调度问题.md | 4 +- 动态规划系列/高楼扔鸡蛋进阶.md | 4 +- 动态规划系列/高楼扔鸡蛋问题.md | 6 ++- 技术/linuxshell.md | 4 +- 技术/linux进程.md | 4 +- 技术/redis入侵.md | 6 ++- 技术/session和cookie.md | 6 ++- 技术/在线练习平台.md | 6 ++- 技术/密码技术.md | 3 +- .../二叉堆详解实现优先级队列.md | 4 +- .../二叉搜索树操作集锦.md | 4 +- 数据结构系列/单调栈.md | 6 ++- 数据结构系列/单调队列.md | 4 +- 数据结构系列/实现计算器.md | 6 ++- 数据结构系列/设计Twitter.md | 4 +- .../递归反转链表的一部分.md | 4 +- .../队列实现栈栈实现队列.md | 4 +- .../FloodFill算法详解及应用.md | 4 +- 算法思维系列/UnionFind算法应用.md | 4 +- 算法思维系列/UnionFind算法详解.md | 4 +- .../twoSum问题的核心思想.md | 4 +- 算法思维系列/为什么推荐算法4.md | 4 +- 算法思维系列/二分查找详解.md | 4 +- 算法思维系列/信封嵌套问题.md | 4 +- .../几个反直觉的概率问题.md | 4 +- 算法思维系列/前缀和技巧.md | 4 +- 算法思维系列/区间交集问题.md | 4 +- .../区间调度问题之区间合并.md | 4 +- 算法思维系列/双指针技巧.md | 4 +- .../回溯算法详解修订版.md | 4 +- 算法思维系列/字符串乘法.md | 6 ++- ...习数据结构和算法的高效方法.md | 4 +- 算法思维系列/常用的位操作.md | 4 +- 算法思维系列/洗牌算法.md | 4 +- 算法思维系列/滑动窗口技巧.md | 41 +++++++++++++++++-- 算法思维系列/烧饼排序.md | 4 +- 算法思维系列/算法学习之路.md | 4 +- 算法思维系列/递归详解.md | 4 +- 高频面试系列/LRU算法.md | 4 +- 高频面试系列/koko偷香蕉.md | 4 +- 高频面试系列/k个一组反转链表.md | 4 +- .../一行代码解决的智力题.md | 4 +- .../二分查找判定子序列.md | 4 +- 高频面试系列/判断回文链表.md | 4 +- 高频面试系列/合法括号判定.md | 4 +- ...如何去除有序数组的重复元素.md | 12 ++++-- 高频面试系列/子集排列组合.md | 6 ++- 高频面试系列/座位调度.md | 4 +- 高频面试系列/打印素数.md | 4 +- 高频面试系列/接雨水.md | 4 +- 高频面试系列/最长回文子串.md | 6 ++- 高频面试系列/水塘抽样.md | 4 +- 高频面试系列/消失的元素.md | 4 +- .../缺失和重复的元素.md | 4 +- 66 files changed, 247 insertions(+), 84 deletions(-) diff --git a/动态规划系列/动态规划之KMP字符匹配算法.md b/动态规划系列/动态规划之KMP字符匹配算法.md index c757fff..a0cc4ce 100644 --- a/动态规划系列/动态规划之KMP字符匹配算法.md +++ b/动态规划系列/动态规划之KMP字符匹配算法.md @@ -428,5 +428,7 @@ KMP 算法也就是动态规划那点事,我们的公众号文章目录有一 **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/动态规划之博弈问题.md b/动态规划系列/动态规划之博弈问题.md index 9b0c22f..9f52fa4 100644 --- a/动态规划系列/动态规划之博弈问题.md +++ b/动态规划系列/动态规划之博弈问题.md @@ -212,5 +212,7 @@ int stoneGame(int[] piles) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/动态规划之四键键盘.md b/动态规划系列/动态规划之四键键盘.md index 6dc1c93..e2641f5 100644 --- a/动态规划系列/动态规划之四键键盘.md +++ b/动态规划系列/动态规划之四键键盘.md @@ -197,5 +197,7 @@ def dp(n, a_num, copy): **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/动态规划之正则表达.md b/动态规划系列/动态规划之正则表达.md index ba289f5..9190afc 100644 --- a/动态规划系列/动态规划之正则表达.md +++ b/动态规划系列/动态规划之正则表达.md @@ -292,6 +292,7 @@ bool dp(string& s, int i, string& p, int j) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+======其他语言代码====== diff --git a/动态规划系列/动态规划设计:最长递增子序列.md b/动态规划系列/动态规划设计:最长递增子序列.md index a5e0a86..c905a60 100644 --- a/动态规划系列/动态规划设计:最长递增子序列.md +++ b/动态规划系列/动态规划设计:最长递增子序列.md @@ -212,5 +212,7 @@ public int lengthOfLIS(int[] nums) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/动态规划详解进阶.md b/动态规划系列/动态规划详解进阶.md index 0181c18..bff29f4 100644 --- a/动态规划系列/动态规划详解进阶.md +++ b/动态规划系列/动态规划详解进阶.md @@ -363,5 +363,7 @@ PS:为啥 `dp` 数组初始化为 `amount + 1` 呢,因为凑成 `amount` 金 **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/团灭股票问题.md b/动态规划系列/团灭股票问题.md index b00b96c..be2b463 100644 --- a/动态规划系列/团灭股票问题.md +++ b/动态规划系列/团灭股票问题.md @@ -425,5 +425,7 @@ int maxProfit_k_any(int max_k, int[] prices) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/子序列问题模板.md b/动态规划系列/子序列问题模板.md index 60d836f..c7a3d5a 100644 --- a/动态规划系列/子序列问题模板.md +++ b/动态规划系列/子序列问题模板.md @@ -1,6 +1,6 @@ # 动态规划之子序列问题解题模板 -**学好算法全靠套路,认准 labuladong 就够了**。 +

GitHub @@ -171,5 +171,7 @@ int longestPalindromeSubseq(string s) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,labuladong 带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/抢房子.md b/动态规划系列/抢房子.md index 8dae329..35a0fb6 100644 --- a/动态规划系列/抢房子.md +++ b/动态规划系列/抢房子.md @@ -1,7 +1,5 @@ # 团灭 LeetCode 打家劫舍问题 -**学好算法全靠套路,认准 labuladong 就够了**。 -

GitHub @@ -257,5 +255,7 @@ int[] dp(TreeNode root) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/最优子结构.md b/动态规划系列/最优子结构.md index 8ca9dc1..2dc21f2 100644 --- a/动态规划系列/最优子结构.md +++ b/动态规划系列/最优子结构.md @@ -1,6 +1,6 @@ # 动态规划答疑篇 -**学好算法全靠套路,认准 labuladong 就够了**。 +

GitHub @@ -154,5 +154,7 @@ for (int i = 1; i < m; i++) **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/最长公共子序列.md b/动态规划系列/最长公共子序列.md index d158110..bee8947 100644 --- a/动态规划系列/最长公共子序列.md +++ b/动态规划系列/最长公共子序列.md @@ -144,5 +144,7 @@ else: **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/编辑距离.md b/动态规划系列/编辑距离.md index 27b8c22..8ba18e4 100644 --- a/动态规划系列/编辑距离.md +++ b/动态规划系列/编辑距离.md @@ -288,5 +288,7 @@ class Node { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/贪心算法之区间调度问题.md b/动态规划系列/贪心算法之区间调度问题.md index 38f5445..70e27fc 100644 --- a/动态规划系列/贪心算法之区间调度问题.md +++ b/动态规划系列/贪心算法之区间调度问题.md @@ -155,5 +155,7 @@ int findMinArrowShots(int[][] intvs) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/高楼扔鸡蛋进阶.md b/动态规划系列/高楼扔鸡蛋进阶.md index 3211f7c..ec5e838 100644 --- a/动态规划系列/高楼扔鸡蛋进阶.md +++ b/动态规划系列/高楼扔鸡蛋进阶.md @@ -292,5 +292,7 @@ while (lo < hi) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/动态规划系列/高楼扔鸡蛋问题.md b/动态规划系列/高楼扔鸡蛋问题.md index 8b80075..70c63a0 100644 --- a/动态规划系列/高楼扔鸡蛋问题.md +++ b/动态规划系列/高楼扔鸡蛋问题.md @@ -1,6 +1,6 @@ # 经典动态规划问题:高楼扔鸡蛋 -**学好算法全靠套路,认准 labuladong 就够了**。 +

GitHub @@ -258,5 +258,7 @@ def superEggDrop(self, K: int, N: int) -> int: **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/技术/linuxshell.md b/技术/linuxshell.md index 2f3f3a6..41e5810 100644 --- a/技术/linuxshell.md +++ b/技术/linuxshell.md @@ -154,5 +154,7 @@ $ sudo /home/fdl/bin/connect.sh **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/技术/linux进程.md b/技术/linux进程.md index 7b400c1..d0a9d8a 100644 --- a/技术/linux进程.md +++ b/技术/linux进程.md @@ -138,5 +138,7 @@ $ cmd1 | cmd2 | cmd3 **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/技术/redis入侵.md b/技术/redis入侵.md index 67cb321..36d18f0 100644 --- a/技术/redis入侵.md +++ b/技术/redis入侵.md @@ -103,5 +103,7 @@ Redis 监听的默认端口是 6379,我们设置它接收网卡 127.0.0.1 的 **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- -

\ No newline at end of file + +

+ +======其他语言代码====== \ No newline at end of file diff --git a/技术/session和cookie.md b/技术/session和cookie.md index 85b4626..7fb7cb4 100644 --- a/技术/session和cookie.md +++ b/技术/session和cookie.md @@ -152,5 +152,7 @@ https://github.com/astaxie/build-web-application-with-golang **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- -

\ No newline at end of file + +

+ +======其他语言代码====== \ No newline at end of file diff --git a/技术/在线练习平台.md b/技术/在线练习平台.md index 7aaaf46..28f21ff 100644 --- a/技术/在线练习平台.md +++ b/技术/在线练习平台.md @@ -116,5 +116,7 @@ https://sqlzoo.net/ **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- -

\ No newline at end of file + +

+ +======其他语言代码====== \ No newline at end of file diff --git a/技术/密码技术.md b/技术/密码技术.md index 8a88315..011352c 100644 --- a/技术/密码技术.md +++ b/技术/密码技术.md @@ -199,7 +199,8 @@ HTTPS 协议中的 SSL/TLS 安全层会组合使用以上几种加密方式,** **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+======其他语言代码====== [test ad](https://labuladong.gitbook.io/algo) \ No newline at end of file diff --git a/数据结构系列/二叉堆详解实现优先级队列.md b/数据结构系列/二叉堆详解实现优先级队列.md index 99e0b06..5353625 100644 --- a/数据结构系列/二叉堆详解实现优先级队列.md +++ b/数据结构系列/二叉堆详解实现优先级队列.md @@ -236,5 +236,7 @@ public Key delMax() { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/数据结构系列/二叉搜索树操作集锦.md b/数据结构系列/二叉搜索树操作集锦.md index 6c05626..801b8fb 100644 --- a/数据结构系列/二叉搜索树操作集锦.md +++ b/数据结构系列/二叉搜索树操作集锦.md @@ -307,5 +307,7 @@ void BST(TreeNode root, int target) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/数据结构系列/单调栈.md b/数据结构系列/单调栈.md index 19600de..fca0ca8 100644 --- a/数据结构系列/单调栈.md +++ b/数据结构系列/单调栈.md @@ -178,5 +178,7 @@ vector nextGreaterElements(vector& nums) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- -

\ No newline at end of file + +

+ +======其他语言代码====== \ No newline at end of file diff --git a/数据结构系列/单调队列.md b/数据结构系列/单调队列.md index e30ddda..eb298a1 100644 --- a/数据结构系列/单调队列.md +++ b/数据结构系列/单调队列.md @@ -207,5 +207,7 @@ vector maxSlidingWindow(vector& nums, int k) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/数据结构系列/实现计算器.md b/数据结构系列/实现计算器.md index dcebc03..2b980f7 100644 --- a/数据结构系列/实现计算器.md +++ b/数据结构系列/实现计算器.md @@ -1,6 +1,6 @@ # 拆解复杂问题:实现计算器 -**学好算法全靠套路,认准 labuladong 就够了**。 +

GitHub @@ -303,5 +303,7 @@ def calculate(s: str) -> int: **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/数据结构系列/设计Twitter.md b/数据结构系列/设计Twitter.md index e5cee44..399fbbb 100644 --- a/数据结构系列/设计Twitter.md +++ b/数据结构系列/设计Twitter.md @@ -299,5 +299,7 @@ PS:本文前两张图片和 GIF 是我第一次尝试用平板的绘图软件 **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/数据结构系列/递归反转链表的一部分.md b/数据结构系列/递归反转链表的一部分.md index 7b68d6f..830e503 100644 --- a/数据结构系列/递归反转链表的一部分.md +++ b/数据结构系列/递归反转链表的一部分.md @@ -215,5 +215,7 @@ ListNode reverseBetween(ListNode head, int m, int n) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/数据结构系列/队列实现栈栈实现队列.md b/数据结构系列/队列实现栈栈实现队列.md index dd3b37c..20b6a8e 100644 --- a/数据结构系列/队列实现栈栈实现队列.md +++ b/数据结构系列/队列实现栈栈实现队列.md @@ -227,5 +227,7 @@ public boolean empty() { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/FloodFill算法详解及应用.md b/算法思维系列/FloodFill算法详解及应用.md index 79c5ac0..1cf2dbf 100644 --- a/算法思维系列/FloodFill算法详解及应用.md +++ b/算法思维系列/FloodFill算法详解及应用.md @@ -236,5 +236,7 @@ int fill(int[][] image, int x, int y, **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/UnionFind算法应用.md b/算法思维系列/UnionFind算法应用.md index c4ebebc..fef484a 100644 --- a/算法思维系列/UnionFind算法应用.md +++ b/算法思维系列/UnionFind算法应用.md @@ -247,5 +247,7 @@ boolean equationsPossible(String[] equations) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/UnionFind算法详解.md b/算法思维系列/UnionFind算法详解.md index 5ea238f..977d8ba 100644 --- a/算法思维系列/UnionFind算法详解.md +++ b/算法思维系列/UnionFind算法详解.md @@ -314,5 +314,7 @@ Union-Find 算法的复杂度可以这样分析:构造函数初始化数据结 **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/twoSum问题的核心思想.md b/算法思维系列/twoSum问题的核心思想.md index 1d2832b..327fc23 100644 --- a/算法思维系列/twoSum问题的核心思想.md +++ b/算法思维系列/twoSum问题的核心思想.md @@ -182,5 +182,7 @@ int[] twoSum(int[] nums, int target) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/为什么推荐算法4.md b/算法思维系列/为什么推荐算法4.md index 3798b38..8792b9c 100644 --- a/算法思维系列/为什么推荐算法4.md +++ b/算法思维系列/为什么推荐算法4.md @@ -98,5 +98,7 @@ **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/二分查找详解.md b/算法思维系列/二分查找详解.md index f055e00..502962f 100644 --- a/算法思维系列/二分查找详解.md +++ b/算法思维系列/二分查找详解.md @@ -505,5 +505,7 @@ int right_bound(int[] nums, int target) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/信封嵌套问题.md b/算法思维系列/信封嵌套问题.md index eed4b72..bd6997f 100644 --- a/算法思维系列/信封嵌套问题.md +++ b/算法思维系列/信封嵌套问题.md @@ -132,5 +132,7 @@ public int lengthOfLIS(int[] nums) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/几个反直觉的概率问题.md b/算法思维系列/几个反直觉的概率问题.md index 185e7a2..767a11f 100644 --- a/算法思维系列/几个反直觉的概率问题.md +++ b/算法思维系列/几个反直觉的概率问题.md @@ -138,5 +138,7 @@ **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/前缀和技巧.md b/算法思维系列/前缀和技巧.md index a5de618..ef96986 100644 --- a/算法思维系列/前缀和技巧.md +++ b/算法思维系列/前缀和技巧.md @@ -156,5 +156,7 @@ for (int i = 1; i < count.length; i++) **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/区间交集问题.md b/算法思维系列/区间交集问题.md index d40a4ea..b2ca238 100644 --- a/算法思维系列/区间交集问题.md +++ b/算法思维系列/区间交集问题.md @@ -130,5 +130,7 @@ def intervalIntersection(A, B): **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/区间调度问题之区间合并.md b/算法思维系列/区间调度问题之区间合并.md index 3a12c58..e4ca2dc 100644 --- a/算法思维系列/区间调度问题之区间合并.md +++ b/算法思维系列/区间调度问题之区间合并.md @@ -88,5 +88,7 @@ def merge(intervals): **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/双指针技巧.md b/算法思维系列/双指针技巧.md index 9859ea3..cf5227d 100644 --- a/算法思维系列/双指针技巧.md +++ b/算法思维系列/双指针技巧.md @@ -227,5 +227,7 @@ void reverse(int[] nums) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/回溯算法详解修订版.md b/算法思维系列/回溯算法详解修订版.md index a614f1f..07e1bfb 100644 --- a/算法思维系列/回溯算法详解修订版.md +++ b/算法思维系列/回溯算法详解修订版.md @@ -306,5 +306,7 @@ def backtrack(...): **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/字符串乘法.md b/算法思维系列/字符串乘法.md index 26ccfe4..0273744 100644 --- a/算法思维系列/字符串乘法.md +++ b/算法思维系列/字符串乘法.md @@ -98,5 +98,7 @@ string multiply(string num1, string num2) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- -

\ No newline at end of file + +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/学习数据结构和算法的高效方法.md b/算法思维系列/学习数据结构和算法的高效方法.md index 2ee5b6b..a5beaf3 100644 --- a/算法思维系列/学习数据结构和算法的高效方法.md +++ b/算法思维系列/学习数据结构和算法的高效方法.md @@ -306,5 +306,7 @@ N 叉树的遍历框架,找出来了把~你说,树这种结构重不重要 **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/常用的位操作.md b/算法思维系列/常用的位操作.md index a35a3a3..f5b5771 100644 --- a/算法思维系列/常用的位操作.md +++ b/算法思维系列/常用的位操作.md @@ -169,5 +169,7 @@ http://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/洗牌算法.md b/算法思维系列/洗牌算法.md index 5aa1768..463a7f1 100644 --- a/算法思维系列/洗牌算法.md +++ b/算法思维系列/洗牌算法.md @@ -208,5 +208,7 @@ for (int feq : count) **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/滑动窗口技巧.md b/算法思维系列/滑动窗口技巧.md index 581aca5..e65a104 100644 --- a/算法思维系列/滑动窗口技巧.md +++ b/算法思维系列/滑动窗口技巧.md @@ -1,4 +1,31 @@ -# 滑动窗口技巧 +# 滑动窗口算法框架 + +

+GitHub + + + +

+ +![](../pictures/souyisou.png) + +**最新消息:关注公众号参与活动,有机会成为 [70k star 算法仓库](https://github.com/labuladong/fucking-algorithm) 的贡献者,机不可失时不再来**! + +相关推荐: +* [东哥吃葡萄时竟然吃出一道算法题!](../高频面试系列/吃葡萄.md) +* [如何寻找缺失的元素](../高频面试系列/消失的元素.md) + +读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: + +[76.最小覆盖子串](https://leetcode-cn.com/problems/minimum-window-substring) + +[567.字符串的排列](https://leetcode-cn.com/problems/permutation-in-string) + +[438.找到字符串中所有字母异位词](https://leetcode-cn.com/problems/find-all-anagrams-in-a-string) + +[3.无重复字符的最长子串](https://leetcode-cn.com/problems/longest-substring-without-repeating-characters) + +**-----------** 本文详解「滑动窗口」这种高级双指针技巧的算法框架,带你秒杀几道高难度的子字符串匹配问题。 @@ -334,8 +361,14 @@ class Solution: return s[start:start+min_len] if min_len != float("Inf") else "" ``` -[上一篇:二分查找解题框架](https://labuladong.gitbook.io/algo) +**_____________** -[下一篇:双指针技巧解题框架](https://labuladong.gitbook.io/algo) +**刷算法,学套路,认准 labuladong,公众号和 [在线电子书](https://labuladong.gitbook.io/algo) 持续更新最新文章**。 -[目录](https://labuladong.gitbook.io/algo#目录) +**本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。 + +

+ +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/烧饼排序.md b/算法思维系列/烧饼排序.md index 5e4e4df..513cbdc 100644 --- a/算法思维系列/烧饼排序.md +++ b/算法思维系列/烧饼排序.md @@ -146,5 +146,7 @@ void reverse(int[] arr, int i, int j) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/算法学习之路.md b/算法思维系列/算法学习之路.md index cd26588..0446ffa 100644 --- a/算法思维系列/算法学习之路.md +++ b/算法思维系列/算法学习之路.md @@ -101,5 +101,7 @@ PS:**如果有的英文题目实在看不懂,有个小技巧**,你在题 **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/算法思维系列/递归详解.md b/算法思维系列/递归详解.md index 4a0b09f..b9a9928 100644 --- a/算法思维系列/递归详解.md +++ b/算法思维系列/递归详解.md @@ -272,5 +272,7 @@ https://leetcode.com/tag/divide-and-conquer/ **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/LRU算法.md b/高频面试系列/LRU算法.md index 8bdcc69..b9ca311 100644 --- a/高频面试系列/LRU算法.md +++ b/高频面试系列/LRU算法.md @@ -343,5 +343,7 @@ class LRUCache { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/koko偷香蕉.md b/高频面试系列/koko偷香蕉.md index c4cb830..cc880dd 100644 --- a/高频面试系列/koko偷香蕉.md +++ b/高频面试系列/koko偷香蕉.md @@ -166,5 +166,7 @@ for (int i = 0; i < n; i++) **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/k个一组反转链表.md b/高频面试系列/k个一组反转链表.md index 7509480..83fbd98 100644 --- a/高频面试系列/k个一组反转链表.md +++ b/高频面试系列/k个一组反转链表.md @@ -153,5 +153,7 @@ ListNode reverseKGroup(ListNode head, int k) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/一行代码解决的智力题.md b/高频面试系列/一行代码解决的智力题.md index 4ca0b6d..1d17782 100644 --- a/高频面试系列/一行代码解决的智力题.md +++ b/高频面试系列/一行代码解决的智力题.md @@ -146,5 +146,7 @@ int bulbSwitch(int n) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/二分查找判定子序列.md b/高频面试系列/二分查找判定子序列.md index 797c098..c71e65f 100644 --- a/高频面试系列/二分查找判定子序列.md +++ b/高频面试系列/二分查找判定子序列.md @@ -165,5 +165,7 @@ boolean isSubsequence(String s, String t) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/判断回文链表.md b/高频面试系列/判断回文链表.md index d25823d..3e24068 100644 --- a/高频面试系列/判断回文链表.md +++ b/高频面试系列/判断回文链表.md @@ -234,5 +234,7 @@ p.next = reverse(q); **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/合法括号判定.md b/高频面试系列/合法括号判定.md index ef9cd34..32239bd 100644 --- a/高频面试系列/合法括号判定.md +++ b/高频面试系列/合法括号判定.md @@ -109,5 +109,7 @@ char leftOf(char c) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/如何去除有序数组的重复元素.md b/高频面试系列/如何去除有序数组的重复元素.md index e159228..1cdec24 100644 --- a/高频面试系列/如何去除有序数组的重复元素.md +++ b/高频面试系列/如何去除有序数组的重复元素.md @@ -108,8 +108,14 @@ def deleteDuplicates(self, head: ListNode) -> ListNode: return head ``` -[上一篇:如何高效解决接雨水问题](https://labuladong.gitbook.io/algo) +**_____________** -[下一篇:如何寻找最长回文子串](https://labuladong.gitbook.io/algo) +**刷算法,学套路,认准 labuladong,公众号和 [在线电子书](https://labuladong.gitbook.io/algo) 持续更新最新文章**。 -[目录](https://labuladong.gitbook.io/algo#目录) +**本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。 + +

+ +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/子集排列组合.md b/高频面试系列/子集排列组合.md index 0d5f905..04fe3bb 100644 --- a/高频面试系列/子集排列组合.md +++ b/高频面试系列/子集排列组合.md @@ -1,6 +1,6 @@ # 回溯算法团灭子集、排列、组合问题 -**学好算法全靠套路,认准 labuladong 就够了**。 +

GitHub @@ -281,5 +281,7 @@ void backtrack(int[] nums, LinkedList track) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/座位调度.md b/高频面试系列/座位调度.md index f2b0306..21e45ef 100644 --- a/高频面试系列/座位调度.md +++ b/高频面试系列/座位调度.md @@ -230,5 +230,7 @@ private int distance(int[] intv) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/打印素数.md b/高频面试系列/打印素数.md index 6ecb9c4..2ab9e10 100644 --- a/高频面试系列/打印素数.md +++ b/高频面试系列/打印素数.md @@ -175,5 +175,7 @@ int countPrimes(int n) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/接雨水.md b/高频面试系列/接雨水.md index 0b3e1e0..e1fd625 100644 --- a/高频面试系列/接雨水.md +++ b/高频面试系列/接雨水.md @@ -208,5 +208,7 @@ if (l_max < r_max) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/最长回文子串.md b/高频面试系列/最长回文子串.md index 5fd2691..9f0f37f 100644 --- a/高频面试系列/最长回文子串.md +++ b/高频面试系列/最长回文子串.md @@ -1,6 +1,6 @@ # 如何寻找最长回文子串 -**学好算法全靠套路,认准 labuladong 就够了**。 +

GitHub @@ -128,5 +128,7 @@ string longestPalindrome(string s) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/水塘抽样.md b/高频面试系列/水塘抽样.md index a9cb9ec..fe0dd09 100644 --- a/高频面试系列/水塘抽样.md +++ b/高频面试系列/水塘抽样.md @@ -145,5 +145,7 @@ $$ --> **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/消失的元素.md b/高频面试系列/消失的元素.md index 843e115..844b5cb 100644 --- a/高频面试系列/消失的元素.md +++ b/高频面试系列/消失的元素.md @@ -129,5 +129,7 @@ public int missingNumber(int[] nums) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file diff --git a/高频面试系列/缺失和重复的元素.md b/高频面试系列/缺失和重复的元素.md index 1175788..06e554f 100644 --- a/高频面试系列/缺失和重复的元素.md +++ b/高频面试系列/缺失和重复的元素.md @@ -136,5 +136,7 @@ vector findErrorNums(vector& nums) { **本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**。

- +

+ +======其他语言代码====== \ No newline at end of file From 97e5e1dee3df464f7deb181fba4139442d77ad26 Mon Sep 17 00:00:00 2001 From: hzs Date: Wed, 11 Nov 2020 17:44:49 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E3=80=90877.=E7=9F=B3=E5=AD=90=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E3=80=90Python=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../动态规划之博弈问题.md | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/动态规划系列/动态规划之博弈问题.md b/动态规划系列/动态规划之博弈问题.md index 9f52fa4..c85c100 100644 --- a/动态规划系列/动态规划之博弈问题.md +++ b/动态规划系列/动态规划之博弈问题.md @@ -215,4 +215,57 @@ int stoneGame(int[] piles) {

-======其他语言代码====== \ No newline at end of file +======其他语言代码====== + + + + + +python3版本 + +由[SCUHZS](https://github.com/brucecat)提供 + +这里采取的是三维的做法 + +```python +class Solution: + def stoneGame(self, piles: List[int]) -> bool: + n = len(piles) + + # 初始化一个n*n的矩阵 dp数组 + dp = [[None] * n for i in range(0, n)] + + # 在三角区域填充 + for i in range(n): + for j in range(i, n): + dp[i][j] = [0, 0] + + # 填入base case + for i in range(0, n): + dp[i][i][0] = piles[i] + dp[i][i][1] = 0 + + # 斜着遍历数组 + for l in range(2, n + 1): + for i in range(0, n-l+1): + j = l + i - 1 + + + # 先手选择最左边或最右边的分数 + left = piles[i] + dp[i + 1][j][1] + right = piles[j] + dp[i][j - 1][1] + + # 套用状态转移方程 + if left > right: + dp[i][j][0] = left + dp[i][j][1] = dp[i + 1][j][0] + else: + dp[i][j][0] = right + dp[i][j][1] = dp[i][j - 1][0] + + res = dp[0][n - 1] + + return res[0] - res[1] > 0 + +``` + From bc14b2e06201be75cf4a28b8d463e8e1f83f6608 Mon Sep 17 00:00:00 2001 From: hzs Date: Wed, 11 Nov 2020 17:50:05 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E3=80=90877.=E7=9F=B3=E5=AD=90=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E3=80=90Python=E3=80=91=E4=B8=80=E7=BB=B4dp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../动态规划之博弈问题.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/动态规划系列/动态规划之博弈问题.md b/动态规划系列/动态规划之博弈问题.md index c85c100..90615ba 100644 --- a/动态规划系列/动态规划之博弈问题.md +++ b/动态规划系列/动态规划之博弈问题.md @@ -269,3 +269,21 @@ class Solution: ``` + + +压缩成一维数组,以减小空间复杂度,做法如下。 + +```python +class Solution: + def stoneGame(self, piles: List[int]) -> bool: + dp = piles.copy() + + for i in range(len(piles) - 1, -1, -1): # 从下往上遍历 + for j in range(i, len(piles)): # 从前往后遍历 + dp[j] = max(piles[i] - dp[j], piles[j] - dp[j - 1]) # 计算之后覆盖一维数组的对应位置 + + return dp[len(piles) - 1] > 0 + + +``` + From 36f59b6fe9ee832a7896e405c8bb76ae62b31e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E5=B7=8D=E8=80=80-LWW?= <694125111@qq.com> Date: Wed, 11 Nov 2020 22:27:58 +0800 Subject: [PATCH 4/4] =?UTF-8?q?Update=20=E6=89=93=E5=8D=B0=E7=B4=A0?= =?UTF-8?q?=E6=95=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加了C++版本的代码 --- 高频面试系列/打印素数.md | 39 +++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/高频面试系列/打印素数.md b/高频面试系列/打印素数.md index 2ab9e10..3a58074 100644 --- a/高频面试系列/打印素数.md +++ b/高频面试系列/打印素数.md @@ -178,4 +178,41 @@ int countPrimes(int n) {

-======其他语言代码====== \ No newline at end of file +======其他语言代码====== + +C++解法: +采用的算法是埃拉托斯特尼筛法 +埃拉托斯特尼筛法的具体内容就是:**要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。** +同时考虑到大于2的偶数都不是素数,所以可以进一步优化成:**要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的奇数倍剔除,剩下的奇数就是素数。** +此算法其实就是上面的Java解法所采用的。 + +这里提供C++的代码: +```C++ +class Solution { +public: + int countPrimes(int n) { + int res = 0; + bool prime[n+1]; + for(int i = 0; i < n; ++i) + prime[i] = true; + + for(int i = 2; i <= sqrt(n); ++i) //计数过程 + { //外循环优化,因为判断一个数是否为质数只需要整除到sqrt(n),反推亦然 + if(prime[i]) + { + for(int j = i * i; j < n; j += i) //内循环优化,i*i之前的比如i*2,i*3等,在之前的循环中已经验证了 + { + prime[j] = false; + } + } + } + for (int i = 2; i < n; ++i) + if (prime[i]) res++; //最后遍历统计一遍,存入res + + return res; + } +}; +``` + + +