经典算法题
LeetCode刷题记录
AnEra
厚积薄发, 天道酬勤
展开
-
剑指offer_41_数据流中的中位数
链接剑指offer_41_数据流中的中位数题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如:[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian(.原创 2020-12-24 11:29:45 · 175 阅读 · 0 评论 -
LeetCode_222_完全二叉树的节点个数
链接LeetCode_222_完全二叉树的节点个数题目给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~2h个节点。示例:输入: 1 / \ 2 3 / \ /4 5 6输出: 6思路: 二分查找 + 位运算对于任意二叉树,都可以通过广度优先搜索或深..原创 2020-11-24 11:13:50 · 353 阅读 · 0 评论 -
LeetCode_5_最长回文子串
链接LeetCode_5_最长回文子串题目给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路思路一、动态规划假设字符串("babab")为s, 它的长度为ndp是大小为 n * n 的二维数组, dp[i][j] 表示s[i,j]是否为回文串, 存储true, false...原创 2020-10-22 16:09:32 · 1904 阅读 · 0 评论 -
LeetCode_72_编辑距离
链接LeetCode_72_编辑距离题目给你两个单词word1 和word2,请你计算出将word1转换成word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例示例1:输入:word1 = "horse", word2 = "ros"输出:3解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose ->...原创 2020-10-21 15:52:57 · 314 阅读 · 0 评论 -
回溯: N皇后问题
目录回溯 (Back Tracking)N皇后问题 (NQueens)解决思路四皇后 – 回溯法四皇后 – 剪枝(Pruning)八皇后 – 回溯法流程N皇后问题– 实现N皇后问题–优化1N皇后问题–优化2回溯 (Back Tracking)回溯可以理解为: 通过选择不同的岔路口来通往目的地(找到想要的结果)每一步都选择一条路出发, 能进则进, 不能进则退回上一步(回溯), 换一条路再试树、图的深度优先搜索(DFS)、八皇后、走迷宫都是典型的回溯应...原创 2020-09-09 18:30:27 · 506 阅读 · 0 评论 -
LeetCode_239_滑动窗口最大值
链接LeetCode_239_滑动窗口最大值题目给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位, 返回滑动窗口中的最大值。示例:输入: nums = [1, 3, -1, -3, 5, 3, 6, 7], 和 k = 3输出: [3, 3, 5, 5, 6, 7]解释: 滑动窗口的位置 最大值----------------------...原创 2020-10-03 15:42:37 · 134 阅读 · 0 评论 -
LeetCode_面试题 16.16. 部分排序
链接LeetCode_面试题 16.16. 部分排序题目给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。示例:输入:[1, 2, 4, 7, 10, 11, 7, 12, 6, 7, 16, 18, 19]输出:[3,9]思路找出逆序对: 从左侧向右遍历, 寻找逆序对;.原创 2020-09-26 17:03:26 · 241 阅读 · 0 评论 -
LeetCode_152: 乘积最大子数组
链接LeetCode_152: 乘积最大子数组问题给你一个整数数组nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。题解题解1: 动态规划思路:第i个元素的最优解并不是在第i个元素的最优解基础上实现的;...原创 2020-09-23 14:35:03 · 176 阅读 · 0 评论 -
LeetCode_494: 目标和
链接LeetCode_494: 目标和问题给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号+和- 。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3...原创 2020-09-22 19:27:56 · 363 阅读 · 0 评论 -
LeetCode_376: 摆动序列
目录链接问题题解题解1: 暴力递归题解2: 动态规划题解3: 动态规划优化题解4: 空间复杂度优化 (动态规划最优解)题解5: 贪心链接LeetCode_376: 摆动序列问题如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如,[1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3)是正负交替出现的。相反, [1,4,7,2,5]..原创 2020-09-18 18:53:40 · 644 阅读 · 0 评论 -
LeetCode_139: 单词拆分
目录链接问题示例我的题解题解1: 记忆化递归题解2: 动态规划题解3: 动态规划 -- 剪枝优化题解4: 字典树链接LeetCode_139: 单词拆分问题给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例示例 1:输入: s = "leetcode", wordDict = ["le..原创 2020-09-17 17:35:44 · 361 阅读 · 0 评论 -
LeetCode_210: 课程表
链接LeetCode_210:课程表问题现在你总共有 n 门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例示例1:输入: 2, [[1,0]]输出: [0,1]解释:总共有 2 门课程。...原创 2020-09-05 19:35:17 · 812 阅读 · 0 评论 -
LeetCode_链表系列
问题:给定一个链表,判断链表中是否有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [1], pos = -1输出:false解释:链表中没有环。题解:思路: 在一个环型操场上, 两个不同位置的人在跑步, 一个跑的.原创 2020-07-14 16:35:32 · 196 阅读 · 0 评论