Leetcode刷题
文章平均质量分 76
卑微小岳在线debug
这个作者很懒,什么都没留下…
展开
-
Leetcode刷题笔记——剑指 Offer 41. 数据流中的中位数(困难)
文章目录题目描述解法复杂度分析C++代码实现参考链接题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。解法给定一长度为 NNN 的无序数组,其中位数的计算方法原创 2022-01-07 10:24:11 · 136 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 19. 正则表达式匹配(困难)
文章目录题目描述解法复杂度分析C++代码实现题目描述请实现一个函数用来匹配包含 '. ’ 和 ‘*’ 的正则表达式。模式中的字符 ‘.’ 表示任意一个字符,而 ‘*’ 表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。*示例 4:输入:s = “aab”p = “cab”输出: true解释: 因为 ‘*’ 表示零个或多个,这里 ‘c’ 为 0原创 2022-01-07 10:02:45 · 317 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 67. 把字符串转换成整数(中等)
文章目录题目描述解法复杂度分析C++代码实现参考链接题目描述写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽原创 2022-01-05 10:29:46 · 84 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 14- I. 剪绳子(中等)
文章目录题目描述解法复杂度分析C++代码实现贪心解法参考链接题目描述给你一根长度为 nnn 的绳子,请把绳子剪成整数长度的 mmm 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m−1]k[0],k[1]...k[m-1]k[0],k[1]...k[m−1] 。请问 k[0]∗k[1]∗...∗k[m−1]k[0]*k[1]*...*k[m-1]k[0]∗k[1]∗...∗k[m−1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长原创 2021-12-25 13:48:35 · 397 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 49. 丑数(中等)
文章目录题目描述解题思路复杂度分析C++代码实现参考链接题目描述我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。解题思路丑数的递推性质: 丑数只包含因子 2,3,52, 3, 52,3,5 ,因此有 “丑数 == 某较小丑数 ×\times× 某因子” (例如:10=5×210 = 5 \times 210=5×2)。设已知长度为 nnn 的丑数序列 x1,x2,⋯ ,xnx_1, x_2, \cdots , x_nx1,x2原创 2022-01-04 11:24:47 · 289 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 66. 构建乘积数组(中等)
文章目录题目描述解法复杂度分析C++代码实现参考链接题目描述给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]解法本题的难点在于 不能使用除法 ,即需要 只用乘法 生成数组 BBB 。根据题目对 B[i]B[i]B[i原创 2022-01-04 14:15:24 · 112 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 60. n个骰子的点数(中等)
文章目录题目描述解法复杂度分析C++代码实现参考链接题目描述把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]解法设输入 nn原创 2022-01-05 09:30:14 · 315 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 48. 最长不含重复字符的子字符串(中等)
文章目录题目描述解题思路方法一:动态规划+哈希表复杂度分析C++代码实现方法二:动态规划+线性遍历复杂度分析C++代码实现方法三:双指针 + 哈希表复杂度分析C++代码实现参考链接题目描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解题思路长度为 NNN 的字符串共有 (1+N)N2\frac{(1 + N)N}{2}2(1+N)N 个子原创 2021-12-30 10:19:14 · 327 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 12. 矩阵中的路径(中等)
文章目录题目描述解法:动态规划复杂度分析C++代码实现参考链接题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物解法:动态规划题目说明:从棋盘的左上原创 2021-12-29 17:31:51 · 112 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 46. 把数字翻译成字符串(中等)
文章目录题目描述解法:动态规划方法一:字符串遍历复杂度分析C++代码实现方法二:数字求余复杂度分析C++代码实现参考链接题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi原创 2021-12-29 10:10:42 · 141 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 44. 数字序列中某一位的数字(中等)
文章目录题目描述解法复杂度分析C++代码实现参考链接题目描述数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。解法将 101112⋯101112 \cdots101112⋯ 中的每一位称为 数位 ,记为 nnn ;将 10,11,12,⋯10, 11, 12, \cdots10,11,12,⋯ 称为 数字 ,记为 numnumnum ;数字原创 2021-12-28 21:19:03 · 71 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 38. 字符串的排列(中等)
文章目录题目描述解法:回溯法复杂度分析C++代码实现参考链接题目描述输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]解法:回溯法对于一个长度为 nnn 的字符串(假设字符互不重复),其排列方案数共有:n×(n−1)×(n−2)…×2×1n×(n−1)×(n−2)…×2×1n×(n−1)×(n−2)…×2×1排列方案的生成原创 2021-12-28 10:40:14 · 108 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 20. 表示数值的字符串(中等)
文章目录题目描述解法:有限状态自动机复杂度分析:C++代码实现参考链接题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数若干空格小数(按顺序)可以分成一下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字一个点 ‘.’ ,后原创 2021-12-27 21:17:13 · 87 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 16. 数值的整数次方(中等)
文章目录题目描述解法复杂度分析C++代码实现参考链接题目描述实现 pow(x,n)pow(x, n)pow(x,n) ,即计算 xxx 的 nnn 次幂函数(即,xnx^nxn)。不得使用库函数,同时不需要考虑大数问题。解法求 xnx^nxn 最简单的方法是通过循环将 nnn 个 xxx 乘起来,依次求 x1,x2,...,xn−1,xnx^1, x^2, ..., x^{n-1}, x^nx1,x2,...,xn−1,xn ,时间复杂度为 O(n)O(n)O(n) 。快速幂法 可将时间复杂度降原创 2021-12-27 09:17:09 · 392 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 12. 矩阵中的路径(中等)
文章目录题目描述解法复杂度分析C++代码实现题目描述给定一个 m×nm × nm×n 二维字符网格 boardboardboard 和一个字符串单词 wordwordword 。如果 wordwordword 存在于网格中,返回 truetruetrue ;否则,返回 falsefalsefalse 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1:输入:board = [[“A”,“B”,“原创 2021-12-23 20:44:16 · 70 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 13. 机器人的运动范围(中等)
文章目录题目描述解题思路方法一:深度优先遍历DFS复杂度分析C++代码实现方法二:广度优先遍历BFS复杂度分析C++代码实现参考连接题目描述地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+原创 2021-12-23 11:26:43 · 136 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 34. 二叉树中和为某一值的路径(中等)
文章目录题目描述方法一:回溯法复杂度分析C++代码实现题目描述给你二叉树的根节点 rootrootroot 和一个整数目标和 targetSumtargetSumtargetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。方法一:回溯法本问题是典型的二叉树方案搜索问题,使用回溯法解决,其包含 先序遍历 + 路径记录 两部分。先序遍历: 按照 “根、左、右” 的顺序,遍历树的所有节点。路径记录: 在先序遍历中,记录从根节点到当前节点的路径原创 2021-12-20 19:43:42 · 193 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 07. 重建二叉树(中等)
文章目录题目描述方法一:递归复杂度分析C++代码实现方法二:迭代复杂度分析C++代码实现方法三:分治算法复杂度分析C++代码实现参考连接题目描述输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]方法一:递归对于任意一颗树而言,前序遍历时原创 2021-12-20 16:55:40 · 226 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 56 - I. 数组中数字出现的次数(中等)
文章目录题目描述解法:分组异或复杂度分析C++代码实现题目描述一个整型数组 numsnumsnums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)O(n)O(n),空间复杂度是O(1)O(1)O(1)。示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]解法:分组异或如果除了一个数字以外,其他数字都出现了两次,对全员进行异或操作,则成对出现的数字的所有位会两两抵消为 000,最终得到的结原创 2021-12-19 15:08:48 · 174 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 56 - II. 数组中数字出现的次数 II(中等)
文章目录题目描述解题思路方法一:有限状态自动机复杂度分析:C++代码实现方法二:遍历统计复杂度分析C++代码实现题目描述在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1解题思路如下图所示,考虑数字的二进制形式,对于出现三次的数字,各 二进制位 出现的次数都是 333 的倍数。因此,统计所有数字的各二进制位中 111 的出现次数,并对 333 求余,结果则为只出现一次的数字原创 2021-12-19 14:16:02 · 114 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 64. 求1+2+…+n(中等)
文章目录题目描述方法一:递归复杂度分析C++代码实现题目描述求 1+2+...+n1+2+...+n1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。方法一:递归如果不加限制地使用递归的方法来实现这道题可以用以下方法来解题:class Solution {public: int sumNums(int n) { return n == 0 ? 0 : n + sumNums(n -原创 2021-12-18 11:20:39 · 905 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 45. 把数组排成最小的数(中等)
文章目录题目描述解法复杂度分析C++代码实现1.快速排序法2.内置函数排序规则的传递性证明题目描述输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: “102”示例 2:输入: [3,30,34,5,9]输出: “3033459”说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0解法该题本质上是一个排序问题。设数组 numsnumsn原创 2021-12-18 10:15:56 · 96 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 36. 二叉搜索树与双向链表(中等)
文章目录题目描述方法一:中序遍历复杂度分析C++代码实现题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。方法一:中序遍历二叉搜索树的中序遍历为递增序列 。将 二叉搜索树转换成一个“排序的循环双向链表” ,其中包含三个要素:排序链表: 节点应从小到大排序,因此应使用中序遍历 “从小到大”访问树的节点。双向链表: 在构建相邻节点的引用关系时,设前驱节点 preprepre 和当前节点 curcurcur ,不仅应构建原创 2021-12-15 17:25:17 · 1404 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 33. 二叉搜索树的后序遍历序列(中等)
文章目录题目描述方法一:递归分治复杂度分析C++代码实现方法二:辅助单调栈题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。注:1.后序遍历定义: [ 左子树 | 右子树 | 根节点 ] ,即遍历顺序为 “左、右、根” 。2.二叉搜索树定义: 左子树中所有节点的值 < 根节点的值;右子树中所有节点的值 > 根节点的值;其左、右子树也分别为二叉搜索树。方法一:递归分治终止条件原创 2021-12-15 14:50:05 · 3314 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 31. 栈的压入、弹出序列(中等)
文章目录题目描述方法一二、使用步骤1.引入库2.读入数据总结题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执原创 2021-12-07 11:11:33 · 62 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 32 - II. 从上到下打印二叉树 II(简单)
Leetcode刷题笔记——剑指 Offer 32 - II. 从上到下打印二叉树 II(简单)题目描述方法一:层序遍历BFS复杂度分析C++代码参考链接题目描述从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7],返回其层次遍历结果:[[3],[9,20],[15,7]]方法一:层序遍历BFSI. 按层打印:题目要求的二叉树的从上至下打印(即按层打印),又称为二叉树的广度优先搜索(BFS)。B原创 2021-11-03 10:53:51 · 137 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 28. 对称的二叉树(简单)
Leetcode刷题笔记——剑指 Offer 28. 对称的二叉树(简单)题目描述方法一:递归复杂度分析C++代码参考链接题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。方法一:递归从顶至底递归,判断每对节点是否对称,从而判断树是否为对称二叉树。算法流程:isSymmetric(root) :特例处理:若根节点 root 为空,则直接返回 true 。返回值:即 recur(root.left, root.right) ;recu原创 2021-11-03 10:27:30 · 388 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 27. 二叉树的镜像(简单)
Leetcode刷题笔记——剑指 Offer 27. 二叉树的镜像(简单)题目描述方法一:递归复杂度分析C++代码方法二:辅助栈(队列)复杂度分析C++代码参考链接题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]方法一:递归从根节点开始,递归地对树进行遍历(dfs),并从叶子节点先开始翻转得到镜像。如果当前遍历到的节点 root 的左右两棵子树都已经翻转得到镜像,那么我们只需要交换两棵原创 2021-11-03 09:02:24 · 88 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 65. 不用加减乘除做加法(简单)
Leetcode刷题笔记——剑指 Offer 65. 不用加减乘除做加法(简单)题目描述方法一:位运算复杂度分析C++代码参考链接题目描述写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数方法一:位运算设两数字的二进制形式 a, ba,b ,其求和 s = a + bs=a+b ,a(i)a(i) 代表 aa 的二进制第 ii 位,原创 2021-11-02 10:01:48 · 221 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 53 - II. 0~n-1中缺失的数字(简单)
Leetcode刷题笔记——剑指 Offer 53 - II. 0~n-1中缺失的数字(简单)题目描述方法一:二分法复杂度分析C++代码方法二复杂度分析C++代码参考链接题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8方法一:二分法根据题意,数组可以按照以下规则划分为两部分。左子数组: nums[i]原创 2021-11-02 09:35:16 · 113 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 30. 包含min函数的栈(简单)
Leetcode刷题笔记——剑指 Offer 30. 包含min函数的栈(简单)题目描述方法一复杂度分析C++代码参考链接题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min();原创 2021-11-01 10:26:26 · 77 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 06. 从尾到头打印链表(简单)
Leetcode刷题笔记——剑指 Offer 06. 从尾到头打印链表(简单)题目描述方法一复杂度分析C++代码方法二:递归C++代码参考链接题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]方法一主要思想就是将链表元素压入一个栈中,再从栈顶按顺序读出即可实现倒序。由于函数返回值的要求,所以需要再另外创建一个整形vector对元素进行保存和操作。复杂度分析时间复杂度:O(n)。正向遍历一遍链表,然后原创 2021-11-01 09:56:20 · 249 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 09. 用两个栈实现队列(简单)
Leetcode刷题笔记——剑指 Offer 09. 用两个栈实现队列(简单)题目描述方法一复杂度分析C++代码总结参考链接题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]原创 2021-11-01 09:41:59 · 68 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 42. 连续子数组的最大和(简单)
Leetcode刷题笔记——剑指 Offer 42. 连续子数组的最大和(简单)题目描述方法一:动态规划复杂度分析C++代码方法二:分治复杂度分析C++代码方法三:前缀和C++代码参考链接题目描述输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.lengt原创 2021-10-27 09:41:18 · 2921 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 40. 最小的k个数(简单)
Leetcode刷题笔记——剑指 Offer 40. 最小的k个数(简单)题目描述方法一:sort排序方法二:堆复杂度分析C++代码方法三:自建堆C++代码参考链接题目描述输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。方法一:sort排序这种考查排序方法的题目中直接用sort进行排序虽然简单,但是在面试中不是最佳选择。方法二:堆用一个大根堆实时维护数组的前 k 小值。首先将前 k 个数插入大根堆中,随后从原创 2021-10-26 10:53:20 · 87 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 17. 打印从1到最大的n位数(简单)
Leetcode刷题笔记——剑指 Offer 17. 打印从1到最大的n位数(简单)题目描述方法一复杂度分析C++代码总结参考链接题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]方法一1.最大的 n 位数(记为 end )和位数 n 的关系: 例如最大的 1 位数是 9 ,最大的 2 位数是 99 ,最大的 3 位数是 999。则可原创 2021-10-25 11:08:15 · 3332 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 22. 链表中倒数第k个节点(简单)
Leetcode刷题笔记——剑指 Offer 22. 链表中倒数第k个节点(简单)题目描述方法一:顺序查找复杂度分析C++代码方法二:快慢双指针复杂度分析C++代码参考链接题目描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。方法一:顺序查找假设当前链表的长度为 n,则我们知道链表的倒数第 k 个原创 2021-10-25 10:33:10 · 102 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 29. 顺时针打印矩阵(简单)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Leetcode刷题笔记——剑指 Offer 29. 顺时针打印矩阵(简单)题目描述方法一:模拟复杂度分析C++代码方法二:按层模拟复杂度分析C++代码方法三C++代码参考链接题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]限制:0 <= matrix.length &l原创 2021-10-25 09:11:52 · 154 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 15. 二进制中1的个数(简单)
文章Leetcode刷题笔记——剑指 Offer 15. 二进制中1的个数(简单)题目描述方法一:循环检查二进制位复杂度分析C++代码方法二:位运算优化复杂度分析C++代码参考链接题目描述编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。示例:输入:n = 11 (控制台输入 00000000000000000000000000001011)输出:3解释:输入的二进制串 0000000000000000000000原创 2021-10-21 10:27:35 · 129 阅读 · 0 评论 -
Leetcode刷题笔记——剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(简单)
Leetcode刷题笔记——剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(简单)题目表述方法一二、使用步骤1.引入库2.读入数据总结题目表述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:0 <= nums.length <= 500000 <= nums[i] <= 1原创 2021-10-21 10:00:43 · 69 阅读 · 0 评论