leetcode刷题记录
文章平均质量分 79
算法学习记录笔记
ITSOK_U
这个作者很懒,什么都没留下…
展开
-
Leetcode-106:根据中后序遍历序列构造二叉树
解题思路1.题目描述2.题目分析和解答2.1 递归2.1.1递归思路2.1.2递归代码(O(N),O(N))2.1.3递归代码2(O(N),O(N))2.2迭代1.题目描述给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorde原创 2022-05-29 13:27:49 · 539 阅读 · 0 评论 -
Leetcode-112:路径总和
112. 路径总和给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点是指没有子节点的节点。这道题和题257. 二叉树的所有路径十分类似,代码也相似。深度优先(O(N),O(N))在本题使用深度优先的话可以使用前序递归来模拟实现,但是在递归中需要处理的是每个节点的路径和的计算要确保不对其它的节点路径和计算造成影原创 2022-05-27 16:03:43 · 330 阅读 · 0 评论 -
Leetcode-513:找树的左下角值
513. 找树左下角的值题目描述:给定一个二叉树的根节点root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。需要把握的是题中的最左边的意思,因为是最左边,所以按照题目要求我们求的节点不一定就是左叶子节点,也有可能是最深层的一个右叶子,下面是几个例子及其结果根据上面的图示我们可以很容易的知道求解目标就是树的最深层的最左边节点的值。对于此类的求解问题一般有两个方向:深度优先和广度优先,一般来说对于涉及层次的问题求解来说,广度优先具有更加清晰的逻辑。下面我们分两个角度来分析原创 2022-05-25 15:20:14 · 252 阅读 · 0 评论 -
Leetcode-404:左叶子之和
404. 左叶子之和题目描述:给定二叉树的根节点 root ,返回所有左叶子之和。深度优先(O(N),O(N))class Solution {public: void getLeftNum(TreeNode* root, int &n){ // 根节点为空或者只有一个节点则返回 if(!root->left && !root->right || root == nullptr ) return; //原创 2022-05-24 15:54:07 · 112 阅读 · 0 评论 -
Leetcode-100:相同的树
100. 相同的树题目描述:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。深度优先递归解决(O(min(m,n)),O(min(m,n)))class Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) { if(p == nullptr && q==nullptr) return true;原创 2022-05-24 14:28:52 · 207 阅读 · 0 评论 -
Leetcode-257:二叉树的所有路径
257. 二叉树的所有路径题目描述:// 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。// 叶子节点 是指没有子节点的节点。1.基于先序遍历的解决对于这道题很容易就可以看出来是个遍历问题的衍生,而且根据题目要求是输出路径,所以我们可以联想到使用先序遍历(根左右的顺序来进行路径打印)。需要处理的是每个节点的路径的保存要确保不对其它的节点路径造成影响,所以使用递归的话在其回溯过程会需要处理那些多余的叶节点。如在上述图示中,红色箭头表示深度向下打印path原创 2022-05-21 15:50:38 · 294 阅读 · 0 评论 -
Leetcode-110:判定平衡二叉树
剑指 Offer 55 - II. 平衡二叉树题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。题目来源:力扣(LeetCode)链接:https://leetcode.cn/problems/balanced-binary-tree首先需要明确的一点是平衡二叉树的定义:树里面每个节点的左右子树的高度差不大于1碰到这道题我们大多数情况下首先想到的必然是从递归入手。那么对于这个问题如何递归呢原创 2022-05-14 16:01:36 · 311 阅读 · 0 评论 -
求树的深度:最小深度和最大深度
解题思路1.题目描述1.1 二叉树的最大深度1.2 n叉树的最大深度1.2 二叉树的最小深度2.题目分析与解答2.1 二叉树的最大深度2.1.1 深度优先思想2.1.2 广度优先思想2.2 n叉树的最大深度2.2.1 深度优先——递归2.2.2广度优先——层次遍历2.3 二叉树的最小深度2.3.1 深度优先——递归2.3.2 广度优先——层次遍历1.题目描述1.1 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点原创 2022-05-10 16:29:17 · 2918 阅读 · 1 评论 -
Leetcode刷题-101:对称二叉树
解题思路1.题目描述2.题目分析2.1 递归分析2.1.1 递归形式2.1.2 递归边界条件2.1.2 当前递归执行逻辑2.2 迭代分析3.题目解答3.1 递归解法3.2 迭代1.题目描述给你一个二叉树的根节点 root , 检查它是否轴对称。示例1:输入:root = [1,2,2,3,4,4,3]输出:true示例2:输入:root = [1,2,2,null,3,null,3]输出:false来源:力扣(LeetCode)链接:https://leetcode-cn.co原创 2022-05-08 15:49:40 · 659 阅读 · 0 评论 -
Leetcode刷题-589&&590:遍历n叉树
解题思路1.题目描述1.1 前序遍历-5891.2 后序遍历5902.题目分析3.题目解答1.题目描述1.1 前序遍历-589示例1:输入:root = [1,null,3,2,4,null,5,6]输出:[1,3,5,6,2,4]示例2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:[1,2,3,6,7,11,14,4,8,1原创 2022-05-07 15:07:28 · 542 阅读 · 0 评论 -
一题问鼎coding之——翻转二叉树
解题思路1.题目描述2.题目分析2.1 递归思路2.2 基于前序遍历的迭代2.3 基于层次遍历的迭代3.题目解答3.1 递归3.2 迭代法实现3.3 层次遍历迭代(滑稽)据说会做这道题就可以直接超越大佬Max Howell(Homebrew的作者),可以自行了解。还等什么,冲起来!1.题目描述给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root = [2原创 2022-05-06 16:29:32 · 684 阅读 · 0 评论 -
二叉树的遍历总结
二叉树的遍历1.前序遍历1.1 递归前序1.2 利用栈模拟递归2.3 迭代3.后序遍历3.1 递归3.2 迭代3.3 直接迭代保存二叉树节点结构如下 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nul原创 2022-05-02 14:43:14 · 1104 阅读 · 0 评论 -
Leetcode刷题-347:前 K 个高频元素
解题思路1.题目描述2.题目分析2.1 使用优先队列3.题目解答3.1 使用优先队列1.题目描述给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例2:输入: nums = [1], k = 1输出: [1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/top-k-freq原创 2022-04-30 17:09:01 · 695 阅读 · 0 评论 -
Leetcode刷题-239:滑动窗口最大值
解题思路1.题目描述2.题目分析3.题目解答1.题目描述给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。示例1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]示例2:输入:nums = [1], k = 1输出:[1]来源:力扣(LeetCode)链接:https://leetcode原创 2022-04-28 17:19:35 · 782 阅读 · 0 评论 -
Leetcode刷题-150:逆波兰表达式求值
解题思路1.题目描述2.题目分析2.1 后缀表达式2.2 后缀表达式求值3.题目解答3.1 使用条件判断选择运算符3.2 利用switch的解法1.题目描述根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意 两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入:tokens = [“2”,“1”,“+”,“3”,“*”]输出:9原创 2022-04-27 16:06:39 · 396 阅读 · 0 评论 -
Leetcode刷题-704:二分查找
解题思路1.题目描述2.题目分析3.题目解答3.1 左闭右闭区间3.2 左闭右开区间1.题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:输入: nums = [-1,0,3,5,9,12], target =原创 2022-04-26 15:09:52 · 353 阅读 · 0 评论 -
Leetcode刷题-20:有效的括号
解题思路1.题目描述2.题目分析3.题目解答1.题目描述给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例1:输入:s = “()”输出:true示例2:输入:s = “(]”输出:false示例3:输入:s = “([)]”输出:false示例4:输入:s = “{[]}”输出:true来源:力扣(LeetCode)原创 2022-04-24 16:06:04 · 595 阅读 · 0 评论 -
Leetcode刷题-459:重复的子字符串
解题思路1.题目描述2.题目分析2.1 暴力枚举2.2 KMP算法解题2.3 使用库函数3.题目解答3.1 穷举法3.2 利用KMP算法解题3.3 库函数1.题目描述给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。示例1输入: s = “abab”输出: true解释: 可由子串 “ab” 重复两次构成。示例2:输入: s = “aba”输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems原创 2022-04-23 17:18:33 · 1974 阅读 · 0 评论 -
Leetcode刷题-28:实现 strStr()
解题思路1.题目描述2.题目分析3.题目解答3.1 调用库方法3.2 暴力解法3.3 kmp算法1.题目描述2.题目分析3.题目解答3.1 调用库方法class Solution {public: int strStr(string haystack, string needle) { return haystack.find(needle); }};3.2 暴力解法class Solution {public: int strStr(strin原创 2022-04-22 16:58:43 · 555 阅读 · 0 评论 -
Leetcode刷题-151:颠倒字符串中的单词
解题思路1.题目描述2.题目分析2.1 整体思路描述2.2 实施2.2.1 去除不规则空格2.2.2 字符串的局部倒置3.题目解答3.1 使用erase进行空格去重复3.2 使用快慢指针进行空格去重复1.题目描述给你一个字符串 s ,颠倒字符串中单词的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅原创 2022-04-18 18:16:50 · 891 阅读 · 0 评论 -
Leetcode刷题-541:反转字符串II
解题思路1.题目描述2.题目分析3.题目解答1.题目描述给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例1:输入:s = “abcdefg”, k = 2输出:“bacdfeg”示例2:输入:s = “abcd”, k = 2输出:“bacd”示例3:输入:s =原创 2022-04-17 13:42:55 · 1111 阅读 · 0 评论 -
Leetcode刷题-344:反转字符串
解题思路1.题目描述2.题目分析3.题目解答双方向单方向1.题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例1:输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例2:输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]来源:力扣(L原创 2022-04-17 13:04:27 · 917 阅读 · 0 评论 -
Leetcode刷题-18:四数之和
解题思路1.题目描述2.题目分析3.题目解答题目代码1.题目描述给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] +nums[d] == target你可以按 任意原创 2022-04-16 15:27:41 · 628 阅读 · 0 评论 -
Leetcode刷题-454:四数相加 II
解题思路1.题目描述2.题目分析3.题目解答哈希集合解法1.题目描述给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < n;nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0示例1:输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]原创 2022-04-15 15:30:09 · 689 阅读 · 0 评论 -
Leetcode刷题-1:两数之和
解题思路1.题目描述2.题目分析2.1 穷举法2.2 哈希集合3.题目解答3.1 穷举3.2 哈希映射1.题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + num原创 2022-04-15 13:59:43 · 91 阅读 · 0 评论 -
Leetcode刷题-202:快乐数
解题思路1.题目描述2.题目分析2.1 哈希集合解法2.2 双指针解法3.题目解答3.1 使用哈希集合存储平方和3.2 快慢指针1.题目描述编写一个算法来判断一个数 n 是不是快乐数。快乐数的定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ;不是,则返回 false示例1:输入:n = 19输出:tr原创 2022-04-14 16:03:19 · 427 阅读 · 0 评论 -
Leetcode刷题-349:两个数组的交集
解题思路1.题目描述2.题目分析2.1 通过哈希集合解题2.2 排序+双指针3.题目解答3.1 哈希集合解法3.2 排序+双指针解法1.题目描述给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。示例1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]解释:[4,9]原创 2022-04-13 10:57:23 · 393 阅读 · 0 评论 -
Leetcode刷题-242:有效的字母异位词
解题思路1.题目描述2.题目分析2.1 哈希集合解法2.2 字符串排序解法3.题目解答1.题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例1:输入: s = “anagram”, t = “nagaram”输出: true示例2:输入: s = “rat”, t = “car”输出: false来源:力扣(LeetCode)链接:https://leet原创 2022-04-12 10:11:51 · 167 阅读 · 0 评论 -
Leetcode刷题-142: 环形链表 II
解题思路1.题目描述2.题目分析2.1 哈希集合辅助法2.2 快慢指针2.2.1 快慢指针的工作3.题目解答3.1 哈希集合辅助求解3.2 快慢指针1.题目描述给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos原创 2022-04-10 11:36:37 · 515 阅读 · 0 评论 -
Leetcode刷题-面试题 02.07. 链表相交
解题思路1.题目描述2.题目分析2.1 位置对齐判断2.2 哈希表解决2.3奇妙的双指针解法3.题目解答3.1 对其位置然后遍历判断3.2 哈希集合解法3.3 双指针法——增长版对齐个人学习过程的小总结,如有纰漏,欢迎指正!1.题目描述给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:示例1:输入:intersectVal = 8, listA = [4,1,8,4,5],原创 2022-04-09 11:00:15 · 928 阅读 · 0 评论 -
Leetcode刷题-24:两两交换链表中的节点
解题思路1.题目描述2.题目分析2.1 迭代法解题2.2 递归解法3.题目解答3.1 迭代3.2 递归1.题目描述给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例2:输入:head = [1]输出:[1]示例3:输入:head = []输出:[]2.题目分析2.1 迭代法解题这道题就是一个普通的链表节点交换问题原创 2022-04-07 10:57:11 · 764 阅读 · 0 评论 -
Leetcode刷题-206:反转链表
解题思路1.题目描述2.题目分析3.题目解答1.题目描述给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head = [1,2]输出:[2,1]示例3:输入:head = []输出:[]来源:力扣(LeetCode)2.题目分析这道题就是个十分简单的节点方向操作题,不涉及什么复杂的算法。我们可以通过构造一个带有头结点的链表使用头插法来实现一个新的反向链表。以[原创 2022-04-06 10:16:52 · 993 阅读 · 1 评论 -
Leetcode刷题-707:设计链表
解题思路1.题目描述2.题目分析3.题目解答1.题目描述设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之原创 2022-04-04 11:34:30 · 168 阅读 · 0 评论 -
Leetcode刷题-59. 螺旋矩阵 II
解题思路1.题目描述2.题目分析3.题目解答1.题目描述给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例2:输入:n = 1输出:[[1]]2.题目分析乍一看这题目好像有点无处下手,因为不知道如何进行循环控制。但是我们可以仔细观察题目描述中的矩阵构成其实是一圈圈来构造的,而这个圈数也是与所给的参数n密切相关,于是我原创 2022-04-03 11:29:03 · 1214 阅读 · 0 评论 -
Leetcode刷题-209:长度最小的子数组
解题思路1.题目描述2.题目分析2.1 暴力解法2.2 双指针法3.题目解答1.题目描述给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例2:原创 2022-04-02 12:06:08 · 1438 阅读 · 0 评论 -
Leetcode刷题-977:有序数组的平方
解题思路1.题目描述2.题目分析3.题目解答:1.题目描述给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序排序。示例1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100];排序后,数组变为 [0,1,9,16,100]示例2:输入:nums = [-7,-3,2,3,11]输出:[4,9,9,49,121]来源:力扣(LeetCode)2原创 2022-04-01 10:52:11 · 693 阅读 · 0 评论 -
Leetcode刷题-27:移除元素
解题思路1.题目介绍:2.题目分析3.题目解答:1.题目介绍:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且nums 中的前两个元素均为 2。你不需要原创 2022-03-31 10:52:23 · 162 阅读 · 0 评论 -
Leetcode刷题-17:电话号码的字母组合
解题思路1.题目描述:2.题目分析2.1 回溯法2.2 队列3.题目解答1.题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例2:输入:digits = “2”输出:[“a”,“b”,“c”]来源:力扣(LeetCod原创 2022-03-28 12:53:17 · 354 阅读 · 0 评论 -
Leetcode刷题-15:三数之和
思路1.题目描述2.题目分析2.1 思想的起源——穷举2.1 穷举的优化——双指针3.题目解答1.题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 。请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例2:输入:nums = [0]输出:[]来源:力扣(LeetCo原创 2022-03-27 13:02:37 · 718 阅读 · 0 评论 -
Leetcode刷题-11:盛最多水的容器
1.题目描述2.题目分析;2.1尝试解答穷举法显示超时,就知道没这么简单!一般来说题目难度到中等的话就不能考虑使用穷举法了。那么我们在穷举法的基础上进行解法的优化。我们可以提取出解题目标,设最大值位maxW,i和j分别是height数组的元素下标,此时的i和j构成一个求解区间,那么就有以下计算公式:maxW=max(maxW,(j-i)*min(height(j),height(i)))2.2 解法推导此时我们已经求出上面的求解公式,我们可以看到,解题过程其实就是求出最优求解区间的问题。也就原创 2022-03-26 11:07:19 · 140 阅读 · 0 评论