![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode解题
文章平均质量分 88
小强强-游泳的鱼
这个作者很懒,什么都没留下…
展开
-
leetcode 1588. 所有奇数长度子数组的和
1588. 所有奇数长度子数组的和给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。子数组 定义为原数组中的一个连续子序列。请你返回 arr 中 所有奇数长度子数组的和 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sum-of-all-odd-length-subarrays著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。分析如果我们知道以 arr[i]arr[i]arr[i] 结尾的所有奇数原创 2020-09-21 12:00:43 · 148 阅读 · 0 评论 -
leetcode 581 最短无序连续子数组
[](leetcode 581 最短无序连续子数组://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/)给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序原创 2020-09-16 14:59:40 · 149 阅读 · 0 评论 -
leetcode 289 生命游戏
生命游戏根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活细胞周围八个位置有超过原创 2020-09-11 19:42:33 · 56 阅读 · 0 评论 -
递归模板
递归模板返回值 helper(参数…){if(退出条件或者基本条件){}//递归前的操作// 递归主体helper();// 递归后出栈操作,一般是由子问题来合成为当前问题的解}链表存有二进制数字0/1,转化为十进制数字如果从低位–> 高位的方式存void Hex2Dec(ListNode*head,int& res){ if(!head){ res = 0; return ; } Hex2Dec(head原创 2020-09-01 20:31:42 · 280 阅读 · 0 评论 -
链表操作相关考点及技巧
判断是否有环,如果有环,找到环入口点使用 快慢指针找到链表的中间节点中间偏右节点 使用快慢指针,正常下 slow指向的为中间偏右节点中间偏左节点 额外添加一个指针prev,指向slow的父节点,则prev指向中间偏左节点找到链表的倒数第N个节点也是使用快慢指针,fast先走 N-1步, 之后一起走合并排序链表链表数量为2时,正常合并,即merge(ListNodel,ListNoder)当链表数量为K时,采用最小优先队列 priority_queue<L..原创 2020-09-01 16:04:50 · 95 阅读 · 0 评论 -
leetcode 25 K个一组翻转链表
K个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内原创 2020-09-01 13:35:31 · 84 阅读 · 0 评论 -
剑指OFFER11 旋转数组的最小值
旋转数组的最小值把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-sh原创 2020-08-24 13:05:50 · 67 阅读 · 0 评论 -
leetcode 779 第K个语法符号
第K个语法符号在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)输入: N = 1, K = 1输出: 0输入: N = 2, K = 1输出: 0输入: N = 2, K = 2输出: 1输入: N = 4, K = 5输出: 1解释:第一行: 0第二行: 01第三行: 0110第四行: 01101001来源:力扣(LeetCode)链接:https://leetcode原创 2020-08-16 04:07:11 · 109 阅读 · 0 评论 -
n!尾0的个数
求解n的阶乘 尾部0的个数尾部0都是由 2∗52*52∗5贡献的,很明显因子为2的数目又大于因子为5的数目,所以因子5的数目就是尾部0的个数int trailingzeros(int n) { int m = 0; while(n){ n /= 5; m += n; } return m;}...原创 2020-08-11 19:36:11 · 69 阅读 · 0 评论 -
位运算的一些技巧
清除最右边的‘1’ n&(n−1)n\&(n-1)n&(n−1)给定一个整数,计算其二进制表示中‘1’的个数int popCount(uint64 n){ int c = 0; while(n){ n &= (n-1); c++; }}n&(n−1)n\&(n-1)n&(n−1) 操作能清除n的最右边的’1’判断一个数是否是2的幂int isPower(uint64 n){ return n&(n-1) ==原创 2020-08-11 17:37:17 · 136 阅读 · 0 评论 -
最大公约数,欧几里德算法
最大共约数int gcd(int n,int m){ if(m == 0) return n; int a = n % m; return gcd(m,a);}如果n < m ,那么 a = n%m = n, gcd(m,a) 就是 gcd(m,n)如果 n == m,那么 a = 0, 结果就是 m否则直至找到 一个数能被另一个整除时,该数就是最大共约数...原创 2020-08-10 16:35:14 · 67 阅读 · 0 评论 -
各种排序算法汇总
选择排序每次都选择一个最值,放入以排序空间内,经过n次,就排序结束每次选择最值的时候,时间复杂度 O(n)O(n)O(n),所以选择排序的时间复杂度 是O(n2)O(n^2)O(n2)优点是: 交换次数最少,是稳定排序最好/最坏时间复杂度都是O(n2)O(n^2)O(n2)void select_sort(vector<int>& nums){ for(int i = 0; i < nums.size() - 1; ++i){ int min_index = i原创 2020-08-07 18:13:41 · 70 阅读 · 0 评论 -
LRU缓存机制
LRU缓存机制题目leetcode 146 题运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而原创 2020-07-29 16:40:47 · 83 阅读 · 0 评论 -
leetcode 快速幂
快速幂算法快速幂就是快速算底数的n次幂,其时间复杂度为 O(log₂N)例如: 求710求 7^{10}求710710=75+5=75∗75,而75=72∗72∗77^{10} = 7^{5+5} = 7^{5}*7^{5},而7^{5}=7^{2}*7^{2}*7710=75+5=75∗75,而75=72∗72∗7codeleetcode 50 Pow(x,n)实现x的...原创 2020-03-22 19:27:32 · 457 阅读 · 0 评论 -
leetcode 1104 二叉树寻路
leetcode 1104 二叉树寻路在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途...原创 2020-03-13 16:08:20 · 460 阅读 · 0 评论 -
leetcode 655 输出二叉树
leetcode 655 输出二叉树在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则:行数 m 应当等于给定二叉树的高度。列数 n 应当总是奇数。根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而另一...原创 2020-03-13 13:04:53 · 126 阅读 · 0 评论 -
二叉树操作模板
二叉树的操作模板使用递归进行遍历、查找、插入、删除、判断合法性二叉树的遍历先序遍历void preorder(TreeNode* root){ if(!root) return ; nums.push_back(root->val); preorder(root->left); preorder(root->right);}中序遍历void inord...原创 2020-03-13 12:36:41 · 142 阅读 · 0 评论 -
leetcode 1071字符串的最大公因子
leetcode 1071字符串的最大公因子对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。示例 1:输入:str1 = “ABCABC”, str2 = “ABC”输出:“ABC”示例 2:输入:str1 = “ABABAB”,...原创 2020-03-12 13:47:07 · 100 阅读 · 0 评论 -
leetcode 并查集
并查集并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(Union-find Algorithm)定义了两个用于此数据结构的操作:Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合。由于支持这两种操作,一个不相交集也常被称为联合-查找数据结构(Union-fi...原创 2020-03-05 21:25:27 · 773 阅读 · 1 评论 -
双指针算法
双指针双指针快慢指针左右指针快慢指针一般用于链表左右指针一般用于数组或者字符串,可以random access快慢指针判断链表中是否有环求环的起始节点链表的中点节点链表倒数第K个节点链表相关的归并排序快慢指针判断链表中是否有环leetcode 141 环形链表slow\fast 指针同时出发,让fast的速度是slow的2倍如果fast 遇到了null,说明无环否则slo...原创 2020-02-27 23:40:09 · 97 阅读 · 0 评论 -
leetcode 93 复原ip地址
题目leetcode 93 复原ip地址给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]分析ip 格式:4个字节,32bit位;如果以点十记法,3个.分割ip为四段,每段的值都不能大于255,且如果本段如果以0开始,那么只能是0,不能带有其他的...原创 2020-02-27 16:19:40 · 74 阅读 · 0 评论 -
leetcode 526优美的数列
题目leetcode 526优美的数列假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:第 i 位的数字能被 i 整除i 能被第 i 位上的数字整除现在给定一个整数 N,请问可以构造多少个优美的排列?示例1:输入: 2输出: ...原创 2020-02-27 13:56:02 · 373 阅读 · 0 评论 -
leetcode 357 计算各个位数不同的数字个数
题目leetcode 357 计算各个位数不同的数字个数给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。示例:输入: 2输出: 91解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。分析注意到 n 是非负整数,当n == 0,x = 1最高位的解空间是[1-9]...原创 2020-02-27 12:50:49 · 230 阅读 · 0 评论 -
leetcode 37 解数独
题目leetcode 37 解数独编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。回溯分析每次可以在1~9中选择,路径上的每个节点的解空间是[1~9]终止条件:路径长度超过81解的判断条件...原创 2020-02-27 02:50:50 · 111 阅读 · 0 评论 -
leetcode 22括号生成
题目leetcode 22 括号生成给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]分析使用回溯算法进行DFS,路径的每个节点都有2个选择, ‘(’ or ‘)’终止条件: 路径上...原创 2020-02-27 01:09:25 · 88 阅读 · 0 评论 -
leetcode 17 电话号码的字母组合
题目leetcode 17 电话号码的字母组合分析定义: 输入的 string digits 为节点组成的 char数据解空间: 2~9键中的字母终止条件: 路径的长度 == 节点数组的长度解的判断条件: 终止条件就是解条件不需要减枝codeclass Solution { void backtrace(const string& digits,vector&...原创 2020-02-26 18:02:09 · 73 阅读 · 0 评论 -
leetcode 回溯算法
回溯算法回溯算法使用DFS在解空间中进行搜索,在某条路径上搜索不到答案时,回退到上层,换条路径搜索。注意:由于使用递归,可能会导致爆栈算法框架backtrace(解空间和路径等状态){ if(满足退出条件){ 记录满足条件的路径 return; } for(在解空间中遍历当前节点){ //减枝 if(不可达路径) continue; 把当前节点加入路径 b...原创 2020-02-26 17:51:08 · 173 阅读 · 0 评论 -
leetcode 216组合总和
题目leetcode 216 组合总和找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]...原创 2020-02-26 17:49:45 · 155 阅读 · 0 评论 -
leetcode 2数/3数/4数之和
描述2数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。分析不能重复利用相同的元素,那么需要对输入数组nums 排序,或者使用set来去重,本题中要求返回数组下标,则不能sort简单的暴力求解: 2层循环,和target比较左...原创 2020-02-26 16:39:43 · 124 阅读 · 0 评论 -
leetcode 3 最长不含重复字符的子字符串
描述003 最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。分析动态规划dp[i]: 以s[i]结束的不含重复字符的子字符串的长度,即s[i - dp[i]]s[i - dp[i] + 1]… s[i] 是不含重复字符的子字符串.如何由dp[i -1]和s[i]信息求得dp[i]呢?逆序遍历dp[i-1]所表示的子字符串,...原创 2020-02-26 14:30:57 · 91 阅读 · 0 评论