LeetCode刷题
长不大的程序员
作者不懒,但什么都没写~
展开
-
LeetCode-337. 打家劫舍 III
LeetCode-337. 打家劫舍 III难度:中等小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。代码:class Solution {public: vector&l原创 2022-04-07 16:05:31 · 220 阅读 · 0 评论 -
LeetCode-213. 打家劫舍 II
LeetCode-213. 打家劫舍 II难度:中等你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2原创 2022-04-07 15:49:32 · 168 阅读 · 0 评论 -
LeetCode-198. 打家劫舍
LeetCode-198. 打家劫舍难度:中等你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 +原创 2022-04-07 15:20:04 · 163 阅读 · 0 评论 -
LeetCode-494. 目标和
494. 目标和难度:中等给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5原创 2022-04-06 23:43:30 · 658 阅读 · 0 评论 -
LeetCode-343. 整数拆分
LeetCode-343. 整数拆分难度:中等给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。示例 :输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。class Solution {public: int integerBreak(int n) { vector<int> f(n+1);//f[i] 拆分数字i,使得f[i]为i拆分原创 2022-04-06 19:08:08 · 1507 阅读 · 0 评论 -
LeetCode-62. 不同路径
LeetCode-62. 不同路径难度:中等一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?class Solution {public: //递归超时 时间复杂度2^(m+n-1) // int dfs(int i, int j, int m, int n) { // if(i>=m ||原创 2022-04-06 18:19:01 · 127 阅读 · 0 评论 -
LeetCode-72. 编辑距离
LeetCode-72. 编辑距离难度:困难给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)cl原创 2022-04-06 00:25:42 · 276 阅读 · 0 评论 -
LeetCode-1143. 最长公共子序列
LeetCode-1143. 最长公共子序列难度:中等给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:原创 2022-04-05 21:43:14 · 207 阅读 · 0 评论 -
LeetCode-132. 分割回文串 II
LeetCode-132. 分割回文串 II难度:困难给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。返回符合要求的 最少分割次数 。示例 :输入:s = “aab”输出:1解释:只需一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。class Solution {public: int minCut(string s) { if(s.size() == 0)return 0; //记录字符串下标i-j是否是回文原创 2022-04-04 22:59:17 · 491 阅读 · 0 评论 -
LeetCode-701. 二叉搜索树中的插入操作
LeetCode-701. 二叉搜索树中的插入操作难度:中等给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。class Solution {public: TreeNode* insertIntoBST(TreeNode* root, int val) {原创 2022-01-12 10:58:05 · 127 阅读 · 0 评论 -
LeetCode-236. 二叉树的最近公共祖先
LeetCode-236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”class Solution {public: TreeNode* fun(TreeNode* root,TreeNode* p,TreeNode* q){ if(p == r原创 2022-01-10 21:21:36 · 110 阅读 · 0 评论 -
LeetCode-501. 二叉搜索树中的众数
LeetCode-501. 二叉搜索树中的众数给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。class Solution {public: //中序遍历 TreeNode* pre = nullptr; int count=1; int maxCount; vector<int> result; void fun(TreeNode* root){ if(!root)return;原创 2022-01-09 21:05:20 · 174 阅读 · 0 评论 -
LeetCode-700. 二叉搜索树中的搜索
LeetCode-700. 二叉搜索树中的搜索难度:简单给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。class Solution {public: TreeNode* searchBST(TreeNode* root, int val) { if(!root)return NULL; if(root->val > val){原创 2022-01-09 20:11:38 · 414 阅读 · 0 评论 -
LeetCode-530. 二叉搜索树的最小绝对差
LeetCode-530. 二叉搜索树的最小绝对差难度:简单给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。class Solution {public: TreeNode* pre = nullptr; int minnum=INT_MAX; int getMinimumDifference(TreeNode* root) { if(!root)return 0;原创 2022-01-09 20:45:57 · 390 阅读 · 0 评论 -
LeetCode-98. 验证二叉搜索树
LeetCode-98. 验证二叉搜索树给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。class Solution {public: // bool fun(TreeNode *root,long lower ,long uper) // { // if(!root)return true;原创 2022-01-09 20:31:12 · 440 阅读 · 0 评论 -
排序算法时间复杂度、空间复杂度、稳定性比较
排序算法时间复杂度、空间复杂度、稳定性比较转载文章:https://blog.csdn.net/yushiyi6453/article/details/76407640转载 2022-01-08 12:18:52 · 98 阅读 · 0 评论 -
LeetCode-113. 路径总和 II
LeetCode-113. 路径总和 II难度:中等给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。class Solution {public: void fun(TreeNode* root,vector<int> v ,vector<vector<int>>& res,int targetSum){ if(!r原创 2022-01-07 13:52:14 · 462 阅读 · 0 评论 -
LeetCode-112. 路径总和
LeetCode-112. 路径总和难度:简单给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum著作权归领扣网络所有。商业转载请联系官方原创 2022-01-07 13:36:18 · 130 阅读 · 0 评论 -
LeetCode-513. 找树左下角的值
LeetCode-513. 找树左下角的值难度:中等给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。class Solution {public: /* 1.递归方法 //最底层-->最大深度-->用一个整形记录深度 //最左边-->前序遍历-->-->用一个整形记录结果 int max_depth=-1; int res; //要递归整棵树才原创 2022-01-07 13:00:26 · 456 阅读 · 0 评论 -
LeetCode-257. 二叉树的所有路径
LeetCode-257. 二叉树的所有路径难度:简单给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。class Solution {public: //前序遍历+回溯即可 void traversal(TreeNode* root , string path , vector<string>& res){ path += to_string(root->val);原创 2022-01-07 11:30:30 · 755 阅读 · 0 评论 -
LeetCode-110. 平衡二叉树
LeetCode-110. 平衡二叉树难度:简单110. 平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。class Solution {public: /* 比较每个节点左右的高度差,所以需要从下往上遍历(后序遍历) */ int getDepth(TreeNode* root){ if(!root)return 0;原创 2022-01-06 11:37:07 · 277 阅读 · 0 评论 -
LeetCode-222. 完全二叉树的节点个数
LeetCode-222. 完全二叉树的节点个数给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。class Solution {public: int fun(TreeNode* root){ if(!root)return 0; int leftCount = fun(root->left); int rightCount = fun(root->right); return 1+原创 2022-01-06 11:34:01 · 116 阅读 · 0 评论 -
LeetCode-101. 对称二叉树
LeetCode-101. 对称二叉树难度:简单题目:给定一个二叉树,检查它是否是镜像对称的。class Solution {public: /* 1.递归 bool compare(TreeNode* left , TreeNode* right){ if(left && right == nullptr)return false; else if(left == nullptr && right)ret原创 2022-01-06 10:19:08 · 78 阅读 · 0 评论 -
LeetCode-226. 翻转二叉树
LeetCode-226. 翻转二叉树难度:简单翻转一棵二叉树。class Solution {public: TreeNode* invertTree(TreeNode* root) { /* 1.递归方法 if(!root)return NULL; TreeNode *left = root->left; TreeNode *right = root->right; root-&原创 2022-01-06 09:47:58 · 189 阅读 · 0 评论 -
LeetCode-94. 二叉树的中序遍历
LeetCode-94. 二叉树的中序遍历难度:简单给定一个二叉树的根节点 root ,返回它的 中序 遍历。class Solution {public: vector<int> inorderTraversal(TreeNode* root) { vector<int> v; stack<TreeNode*> s; if(root==nullptr)return v; TreeNode *原创 2022-01-04 15:58:44 · 259 阅读 · 0 评论 -
LeetCode-199. 二叉树的右视图
LeetCode-199. 二叉树的右视图难度:中等给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。//思路:保存层序遍历的最右端的值即可class Solution {public: vector<int> rightSideView(TreeNode* root) { vector<int> v; vector<int> res; if(!r原创 2022-01-04 16:33:51 · 498 阅读 · 0 评论 -
107. 二叉树的层序遍历 II
107. 二叉树的层序遍历 II难度:中等给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)class Solution {public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> res; if(!root)return res;原创 2022-01-04 16:31:18 · 83 阅读 · 0 评论 -
LeetCode-111. 二叉树的最小深度
LeetCode-111. 二叉树的最小深度难度:简单给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。class Solution {public: // int fun(TreeNode* root ,int depth){ // if(!root->left && !root->right)return depth; // int left = I原创 2022-01-05 18:45:25 · 72 阅读 · 0 评论 -
LeetCode-209. 长度最小的子数组
LeetCode-209. 长度最小的子数组难度:中等给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。class Solution {public: int minSubArrayLen(int target, vector<int>& nums) {原创 2022-01-03 12:48:37 · 355 阅读 · 0 评论 -
LeetCode-27. 移除元素
LeetCode-27. 移除元素难度:简单给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-element著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。原创 2022-01-03 11:56:27 · 111 阅读 · 0 评论 -
LeetCode-146. LRU 缓存
LeetCode-146. LRU 缓存请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类:LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组原创 2022-01-02 12:53:20 · 307 阅读 · 0 评论 -
LeetCode-79. 单词搜索
单词搜索难度:中等给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。class Solution {public: bool fun(vector<vector<char>>& board,vector<v.原创 2021-12-31 17:10:44 · 3841 阅读 · 0 评论 -
LeetCode-105. 从前序与中序遍历序列构造二叉树
从前序与中序遍历序列构造二叉树难度:中等class Solution {public: TreeNode *fun(vector<int>& preorder,int preleft, int preright, map<int,int> &map_ValToIndex, int inleft , int inright ) { if(preleft>preright || inleft>inright)return N.原创 2021-12-30 09:41:37 · 3541 阅读 · 0 评论 -
LeetCode-98. 验证二叉搜索树
验证二叉搜索树难度:中等给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。class Solution {public: bool fun(TreeNode *root,long lower ,long uper) { if(!root)return true; if(ro.原创 2021-12-29 18:18:33 · 2109 阅读 · 0 评论 -
LeetCode-78 子集
子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。class Solution {public: vector<vector<int>> res; void fun(vector<int>& nums,int i,vector<int> &v) { if(i==nums.size())retu.原创 2021-12-29 15:30:56 · 1790 阅读 · 0 评论 -
LeetCode-75颜色分类
颜色分类难度:中等给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。class Solution {public: void sortColors(vector<int>& nums) { int begin=0,end=nums.size()-1; //双指针,一个指向0,一个指向2 fo.原创 2021-12-27 21:08:06 · 181 阅读 · 0 评论