
刷题
就着嘎巴菜喝大碴粥
这个作者很懒,什么都没留下…
展开
-
leetcode37 --- solveSudoku(解数独)
1 题目编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用'.'表示。2 解法起始是9*9的格子, 大部分的格子的值是没有确定的, 所以把所有的未确定值的格子放到一个数组里面, 具体可见代码:...原创 2021-06-29 17:09:51 · 255 阅读 · 0 评论 -
leetcode42 --- trap
1 题目给定n个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2021-06-08 17:47:19 · 148 阅读 · 0 评论 -
leetcode41 --- firstMissingPositive
1 题目给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。2原创 2021-06-08 17:09:53 · 142 阅读 · 0 评论 -
leetcode51 --- solveNQueens
1 题目n皇后问题 研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的n皇后问题 的解决方案。每一种解法包含一个不同的n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。2 解法...原创 2021-05-28 15:16:01 · 106 阅读 · 0 评论 -
leetcode45 --- jump
1 题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/jump-game-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。...原创 2021-05-28 11:04:33 · 212 阅读 · 1 评论 -
leetcode39 --- combinationSum
1 题目给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。2 解法首先要对数组candidates进行遍历, 数组candidates里面的每个元素都有选和不选两种可能, 如果选的话, 剩下的target就是之前的target减去现在这个元素, 根据这种思想,...原创 2021-05-27 16:45:08 · 149 阅读 · 0 评论 -
leetcode33 --- search
1 题目整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。给你 旋转后 的数组 n.原创 2021-04-29 15:11:41 · 152 阅读 · 0 评论 -
leetcode32 --- longestValidParentheses
1 题目给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。2 解法2.1 动态规划方法维护一个字符串长度的数组cur_max_len, 第i个元素代表以当前'('或者')'结束的最长有效括号的长度. 这样就会利用动态规划递推的手段, 一遍循环就搞定(时间复杂度为).当当前的s[i]为')'的时候(为'('的时候不管, 肯定是0), 那么如果以当前的右括号为结束的合法子串, 肯定需要找到一个与其配对的左括号, 判断与其相临的左元素, 如果是'(',...原创 2021-04-28 21:01:43 · 145 阅读 · 0 评论 -
leetcode 26 --- removeDuplicates
1 题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。2 思路此题要利用快慢针的思想, 通过遍历快针, 如果发现快针跟前一个元素不同, 那么说明唯一元素的数量+1, 然后把这个唯一元素放到写到数组慢针的位置, 也就实现了把数组中所有唯一元素都放到了前面.3 代码int removeDuplicates(vector<原创 2021-03-23 20:41:19 · 167 阅读 · 0 评论 -
leetcode 6 --- convertZ
1 题目将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行Z 字形排列。2 解法2.1 罗列每一行的情况2.1.1 思路按照原序列的顺序进行遍历, 看每个元素按照Z字型排列的话会处于哪一行, 最后合并所有行.2.1.2 代码 string convert(string s, int numRows) { if (numRows == 1 || s.size() <= numRows) { ret...原创 2021-02-25 10:19:22 · 245 阅读 · 0 评论 -
leetcode 11
1 题目给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。2 解法2.1 思路这道题用双指针的解法可以让时间复杂度o(N).至于为什么可以用双指针的方法,思路如下:第一步, 让左指针在最左边, 右指针在最右边, 假设左边界的值为x, 右边界的值为y, 左右边界的距离为t, 那么此时能容...原创 2021-01-05 21:15:09 · 165 阅读 · 1 评论 -
leetcode 10 --- 正则表达式匹配
1 题目给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。2 思路使用动态规划的方法, 开辟一个大小是(s_size + 1) * (p_size + 1)的二维数组Match, Match[i][j]代表着s的前i个字符和p的前j个字符是否匹配, 要获取Match[i][j]的值首先要观察s的第i个字符(s[i - 1]...原创 2021-01-04 21:18:47 · 185 阅读 · 1 评论 -
leetcode 4 --- 寻找两个有序数组的中位数
1 题目给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出并返回这两个正序数组的中位数。进阶:设计一个时间复杂度为 O(log (m+n)) 的算法.2 解法这个题如果m+n是偶数, 就是找到第(m+n)/2以及第(m+n)/2 + 1个数, 如果是奇数, 那么就是第(m+n +1)/2个数.2.1 普通解法2.1.1 思路因为两个序列都是排好序的, 那就按照双指针法找当前两个序列中更小的数2.1.2 代码太笨了...毕竟这不是时间复..原创 2020-12-23 20:57:47 · 140 阅读 · 0 评论 -
leetcode 9 --- 回文数
1 题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。2 解法2.1 初版2.1.1 思路由于题目不允许把数直接转化为字符串, 所以想到了把数的每一位转换为双向数组, 然后对头尾一点一点比较2.1.2 代码 bool isPalindrome(int x) { if (x < 0) { return false; } deque<int> t原创 2020-12-09 21:12:07 · 131 阅读 · 0 评论 -
leetcode 2 --- 两数相加
1 题目给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。2 解法2.1 初版解法/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *ne...原创 2020-12-07 19:41:00 · 162 阅读 · 0 评论 -
leetcode 1 --- 两数之和
1 题目给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。2 解法struct haveOrigionIndexNumber { int origionIndex; int value;};bool valueUp(haveOrigionIndexNumber &first, haveOrigionIndexNumbe...原创 2020-12-07 19:35:53 · 95 阅读 · 0 评论 -
leetcode 3 --- 无重复字符的最长子串
1 题目给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。2 思路2.1 迭代思路刚开始的想法肯定是暴力解法, 遍历字符串每一个字符, 看以当前字符为起点的最长无重复子串有多长, 这样做有一个可以优化的地方, 比如以当前循环到的字符起点A, 找到了以A为起点的最长无重复子串的终点B, 也就是说从字符A到B之间的所有字符都是不重复的,那么A的下一个到B的子所有字符也都是不重复的, 所以下一次遍历的左侧起点肯定是A下一个, 右侧起点就可以直接从B下一个开始.2.2 判定当前字符..原创 2020-11-26 19:28:52 · 154 阅读 · 0 评论 -
leetcode 148 --- 链表排序
1 题目链表排序2 解法2.1 冒泡排序/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * * @param head ListNode类 * @return ListNode类 */ ListNode* sortList(ListNode* head) {原创 2020-10-29 16:12:38 · 127 阅读 · 0 评论 -
leetcode 107 --- 二叉树程序遍历 ii
1 题目给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)2 解法2.1 我的最初解法按照正常的层序遍历应该是从上到下的,只要用一个栈先临时存一下每一层的,在循环一遍:/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /**原创 2020-10-22 17:48:28 · 94 阅读 · 0 评论 -
leetcode 112 --- 二叉树根节点到叶子节点和为指定值的路径
1 题目给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum的路径.2 解法用递归的方法,如果当前不是叶子节点,就把sum减去当前的值,并把当前节点当作路径节点push进临时路径数组中,然后去检查其左右节点,如果是叶子节点的话,检查其值和剩下的sum值是否相等,如果相等就把已有的path当成结果之一放进最终result中:/** * struct TreeNode { * int val; * struct TreeNode *left; * stru.原创 2020-10-22 16:27:29 · 679 阅读 · 0 评论 -
leetcode 109 --- 有序链表变成二叉搜索树
1 题目给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)2 解法2.1 转化有序链表为数组/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; *//** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution原创 2020-10-22 15:15:51 · 112 阅读 · 0 评论 -
leetcode 110 --- 判断给定的二叉树是否是平衡二叉树
1 题目判断给定的二叉树是否是平衡二叉树平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1。一颗树的高度指的是树的根节点到所有节点的距离中的最大值。2 解法2.1 多次递归最初的想法肯定是先求出每个节点的左右子树的高度,如果差距不超过1再用递归的方式判断其左右子节点是否平衡.而求高度的方法也用递归的方法,所以需要用到多重递归:/** * struct TreeNode { * int val; * struct TreeNode *l.原创 2020-10-22 11:49:38 · 156 阅读 · 0 评论 -
leetcode 116 --- 填充每个节点指向最右节点的next指针
1 题目填充每个节点指向最右节点的next指针,填充所有节点的next指针,指向最接近它的同一层右边节点。如果没有同一层没有右边的节点,则应该将next指针设置为NULL。初始时,所有的next指针都为NULL注意:你只能使用常量级的额外内存空间 可以假设给出的二叉树是一个完美的二叉树(即,所有叶子节点都位于同一层,而且每个父节点都有两个孩子节点)。2 解法因为此题为按层来填充每一个节点的next为其同层的右节点(如果存在的话)2.1 用队列的方法2.2 不用队列因.原创 2020-10-21 11:48:15 · 237 阅读 · 0 评论 -
leetcode 144 --- 二叉树前序遍历
1 题目求给定的二叉树的前序遍历。2 解法2.1 递归解法2.2 非递归解法前序遍历,先遍历根节点,然后遍历左节点,最后是右节点,所以用栈的方式,先是根节点入栈,然后出栈遍历,如果该节点有左右节点,那么左右节点入栈(应为右节点先入栈,然后是左节点,因为左节点先遍历,所以是左节点后入栈)./** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */原创 2020-10-19 16:35:04 · 171 阅读 · 0 评论 -
leetcode 145 --- 二叉树后序遍历
1 题目用递归的方法对给定的二叉树进行后序遍历。例如:给定的二叉树为{1,#,2,3},返回[3,2,1].示例1输入{1,#,2,3}输出[3,2,1]2 解法2.1 递归解法/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /**原创 2020-10-19 11:22:07 · 204 阅读 · 0 评论 -
leetcode 111 --- 二叉树最小深度
1 题目求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。2 解法2.1 递归方法要找到最小深度,首先要确定有根到叶的第一个叶节点,也就是一层一层确定.所以有:/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * *原创 2020-10-19 11:01:22 · 162 阅读 · 0 评论 -
leetcode 75 --- sort-colors
1 题目现在有一个包含n个物体的数组,其中物体颜色为颜色为红色、白色或蓝色,请对这个数组进行排序,让相同颜色的物体相邻,颜色的顺序为红色,白色,蓝色。我们用0,1,2分别代表颜色红,白,蓝注意:本题要求你不能使用排序库函数扩展:一个非常直接的解法是两步的计数排序的算法首先:遍历一遍数组,记录0,1,2的数量,然后重写这个数组,先将0写入,再将1写入,再将2写入你能给出一个只用一步,并且能在常数级空间复杂度解决这个问题的算法吗?2 解法2.1 思路刚开始我的思路是左原创 2020-06-30 21:11:32 · 163 阅读 · 0 评论 -
leetcode 18 --- 4sum
1 题目给出一个有n个元素的数组S,S中是否有元素a,b,c和d满足a+b+c+d=目标值?找出数组S中所有满足条件的四元组。注意:四元组(a、b、c、d)中的元素必须按非降序排列。(即a≤b≤c≤d) 解集中不能包含重复的四元组。 例如:给出的数组 S = {1 0 -1 0 -2 2}, 目标值 = 0.↵↵ 给出的解集应该是:↵ (-1, 0, 0, 1)↵ (-2, -1, 1, 2)↵ (-2, 0, 0, 2)2 解法2.1 我的...原创 2020-06-24 19:37:46 · 352 阅读 · 0 评论 -
leetcode 142 --- linked-list-cycle-ii
asd原创 2020-12-28 15:08:33 · 123 阅读 · 0 评论