
LeetCode算法
文章平均质量分 56
leetcode算法
Peanutty
菜鸡一枚
展开
-
【LeetCode31】下一个排列
题目描述网友题解转载自:https://leetcode-cn.com/problems/next-permutation/solution/xia-yi-ge-pai-lie-suan-fa-xiang-jie-si-lu-tui-dao-/“下一个排列”的定义是:给定数字序列的字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。我们可以将该问题形式化地描述为:给定若干个数字,将其组合为一个整数。如何将这些数字重新排列,以得到下一个更大的整数。转载 2021-12-27 19:02:27 · 177 阅读 · 0 评论 -
【LeetCode21】合并两个有序链表(不带头结点)
题目描述代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x),原创 2021-12-27 16:46:43 · 647 阅读 · 0 评论 -
【LeetCode】86、分隔链表
题目描述给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。示例1示例2题解我们需要构造两个链表higher和less,less链表用来按顺序存储所有小于x的节点,higher链表按顺序存储所有大于等于x的节点。最后将less链表尾节点指向higher链表首节点即可。为此,我们使higher_head和less_head分别为两个空节点(即其值val没有任何原创 2021-03-30 20:34:12 · 160 阅读 · 0 评论 -
【LeetCode】79、单词搜索(dfs,回溯,vector二维数组动态初始化)
题目描述给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用示例:题解题目要求相邻单元格的字母且不允许重复。思路是:在二维网格中将单词中字母逐个搜索,如果搜索到该字母,则在该字母相邻(上下左右)位置搜素单词中下一个目标字母,如果相邻位置存在下一个目标字母,则以下一个字母为中心,继续在该字母邻近搜索,这样一直递归搜索,深度优先遍历(如果找到一个目标字原创 2021-03-28 17:16:19 · 226 阅读 · 0 评论 -
【LeetCode】69、x的平方根(二分查找)
题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例1示例2题解思路:解ans是x平方根的整数部分,也就是求解k平方<=x的最大值,对x进行二分查找。设解为ans,对x进行二分查找,对于二分值mid,如果mid平方<=x,那么ans可能是mid也可能比mid大,先记录ans=mid,再将二分头设置为mid+1,在mid之后继续查找ans;反之,操作类似。重点在于如原创 2021-03-27 16:50:15 · 207 阅读 · 0 评论 -
【LeetCode】67、二进制求和
题目描述给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例1示例2题解思路本题就是一个二进制求和,用C、C++语言求解主要在于处理字符与字符相加与进位的问题,那么从两个字符串的末端开始遍历,逐个字符相加,用 int 变量记录进位值,本题我构造了一个加法辅助函数,用于两个字符与进位值相加,返回一个进位值和结果字符(在辅助函数中用 int 类型的除法和取模实现),这样循环遍历直至完毕代码class Solution {public:原创 2021-03-24 10:59:05 · 95 阅读 · 0 评论 -
【LeetCode】56、合并区间(sort排序vector)
题目描述以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例1示例2题解首先第一点想到的应该就是对于输入的二维数组进行排序,按照区间数组的第一个数(开始区间)升序排序,排好序后合并起来就非常方便了。首先构造一个空的vector<vector< int >>空数组 merged 用来存放结果,将 inter原创 2021-03-20 19:07:53 · 185 阅读 · 0 评论 -
【LeetCode】53、最大子序和 (动态规划)
题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例1示例2示例3解题思路连续子数组中和为最大。从题目可以想到,用最暴力的方法就是列举所有子数组并且计算其和,比较得到最大的和。显然这不是一个好的方法。但我们可以从枚举所有子数组中得到思路,如果想要枚举所有子数组,那么需要变量 i,j 表示第 i 个数到第 j 个数的数组,i 表示起点,j 表示终点,然后两层循环(外层起点 i 循环,内层终点 j 循环)得到子数组[i , j]原创 2021-03-19 09:12:11 · 121 阅读 · 0 评论 -
【LeetCode】46、全排列(递归、回溯)
题目描述给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例解题思路本题看起来题目描述很简单,但一时间不知从何入手。本题解法:构造一棵树型结构来看全排列问题,每个数只能出现一次,出现在不同的位置形成排列。先看示例,1,2,3三个数,第一个位置可以为1,2或者3,假如选择 1,第二个位置就只能选2 或者 3,第二个位置选定最后选择第三个位置。这样一种方案选择完毕之后需要回溯,假如第二个位置选了 2,回溯时将 2 弹出,第二个位置选择下一种可能 3,进入第三个位置选择,第三个位置选择完毕记录原创 2021-03-14 00:14:56 · 206 阅读 · 0 评论 -
【LeetCode】45、跳跃游戏Ⅱ(动态规划)
题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例说明假设你总是可以到达数组的最后一个位置。解题思路刚开始想到的思路是递归,调用递归函数(参数携带表示位置的索引)返回从该位置到最后一个位置需要的最小跳数。虽然递归法可以求解,但这并不是一个好的思路。不管是从时间还是空间来说消耗都非常大,复杂度都是指数增长的,而且如果数组长度到15以上或者20以上,递归法都会超时。然后想到了一原创 2021-03-13 11:25:32 · 424 阅读 · 0 评论 -
【LeetCode】39,组合总和 (递归、回溯)
题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。示例1示例2题解本题看似简单,实则略微复杂,每个数可以重复取,而不是只取一次或者不取,一个数可以取多次,先到了使用递归的回溯方法,然而回溯法是令人比较头疼的算法。对于candidates中的数使其总和为target,使用递归函数,先用index索引标记第一个数,从第一个数开始判断,原创 2021-03-11 10:46:46 · 125 阅读 · 0 评论 -
【LeetCode】38、外观数组(递归,map,vector)
题目描述给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 “11”原创 2021-03-10 15:48:29 · 115 阅读 · 0 评论 -
【LeetCode】112、路径总和,递归深度优先求解
题目描述给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。题解本题使用递归深度优先遍历树 的解法,先递归左子树是否为真,再递归右子树是否为真,如果任意子树为真则为true,否则为falseclass Solution {public: bool hasPathSum(TreeNode* root, int targetSum原创 2021-03-03 21:51:37 · 115 阅读 · 1 评论 -
【LeetCode】20、有效的括号,map和stack
问题描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。解题思路有效的括号,有先进后出的思想,栈的思想,每个括号有对应的回括号,且顺序不能乱,先写的括号则后写回括号,后写的括号则先写回括号。那么就将字符串中的字符遍历,遇到括号则入栈,遇到回括号则出栈比较,如果回括号与括号相对应则继续,如果不对应则直接返回false程序结束。遍历所有原创 2021-01-21 23:19:46 · 162 阅读 · 0 评论