算法
CATs_001
代码也能充满温情~
展开
-
LeetCode刷题复习目录
也可作为刷题顺序复习动态规划篇案例:【LeetCode NO.70】爬楼梯扩展:矩阵图类的动态规划:【LeetCode NO.62】不同路径【LeetCode NO.62】不同路径Ⅱ其他:【LeetCode NO.120】三角形最小路径和...原创 2020-08-31 17:56:44 · 163 阅读 · 0 评论 -
Python实现所有的排序
一、冒泡排序一句话:每轮遍历两两比较,把最小/最大的数放到数组最后的位置。def BubbleSort(listArray): n = len(listArray) for i in range(n): for j in range(1, n - i): if listArray[j] < listArray[j - 1]: listArray[j - 1], listArray[j] = listArr原创 2020-09-28 15:47:09 · 387 阅读 · 0 评论 -
【LeetCode NO.5】最长回文子串
题目描述:给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"分析:这道题有很多解法,例如暴力匹配、中心扩散、动态规划等,这里我使用了一个很重要的算法思想——Manacher 算法。[Manacher(1975)] 发现了一种线性时间算法,可以在列出给定字符串中从字符串头部开始的所有回文。并且,...原创 2020-09-22 12:18:35 · 102 阅读 · 0 评论 -
【LeetCode NO.147】对链表进行插入排序
题目描述:对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入数据插入完为止。示例 1:输入: 4->2->1..原创 2020-09-15 17:03:08 · 123 阅读 · 1 评论 -
【LeetCode NO.20】有效的括号
题目描述:给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输入: "([)]"输出: false示例5:输入: "{[]}"输...原创 2020-09-14 12:57:52 · 76 阅读 · 0 评论 -
【LeetCode NO.25】K 个一组翻转链表
这代题目想了很久没有做出来,看了LeetCode上面大神的题解之后觉得很巧妙,值得记录一下。题目描述:给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回:2->1->4->3->5当k= 3 时,应当返回:3->...转载 2020-09-14 11:02:28 · 93 阅读 · 0 评论 -
【LeetCode NO.242】有效的字母异位词
题目描述:给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false分析:这是一道最考察数组的最基础的题目,我们要注意数组和链表在结构上和功能上的差异: 数组 链表 优点 构建一个数组非常简单 能让我们在O(1)的时间里根据数组下标(in...原创 2020-09-13 17:11:36 · 97 阅读 · 0 评论 -
【LeetCode NO.221】最大正方形
题目描述:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4分析:问题拆解:以某个位置为例,判断以该位置为右下角的正方形需要判断三个方向,左、上、左上状态定义:以当前点为右下角的正方形的边长的最大值递推方程:这个递推方程不太好想到,但是特别容易理解:代码实现:Java/* * @lc app=leetcode.原创 2020-09-01 16:17:02 · 113 阅读 · 0 评论 -
【LeetCode NO.53】最大子序和
题目描述:给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。分析: 问题拆解 如果以 i 结尾的子序列中,最大的和是多少? 状态定义 dp[0] = nums[0]dp[i]表示以下标为 i 结尾的子序列中最大的和,即 dp[i] = i 位置的元素的值 +以 i...原创 2020-08-31 22:40:48 · 135 阅读 · 0 评论 -
【LeetCode NO.62】不同路径Ⅱ
同样是针对矩阵类的动态规划,我们直接看题目给出思路分析:题目描述:一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用1和0来表示。说明:m和n的值均不超过 100。示例1:输入:[ [0,0,0], [0,1,0],...原创 2020-08-31 17:51:04 · 159 阅读 · 0 评论 -
【LeetCode NO.120】三角形最小路径和
这里给出了动态规划基础题的第二个例子,我们用四步分析法求解该题目。给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点在这里指的是下标与上一层结点下标相同或者等于上一层结点下标 + 1的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为11(即,2+3+5+1= 11)。问题拆解下一层的某个位置的值一定是会经过上面一层...原创 2020-08-31 17:42:42 · 121 阅读 · 0 评论 -
【LeetCode NO.62】不同路径
接下来的题目是针对具体的一类动态规划问题,矩阵类动态规划问题,来看看针对这一类问题的思路和注意点。矩阵类动态规划,也可以叫做坐标类动态规划,一般这类问题都会给你一个矩阵,矩阵里面有着一些信息,然后你需要根据这些信息求解问题。其实矩阵可以看作是图的一种,怎么说?你可以把整个矩阵当成一个图,矩阵里面的每个位置上的元素当成是图上的节点,然后每个节点的邻居就是其相邻的上下左右的位置,我们遍历矩阵其实就是遍历图,在遍历的过程中会有一些临时的状态,也就是子问题的答案,我们记录这些答案,从而推得我们最后想要的答.原创 2020-08-28 17:29:08 · 124 阅读 · 0 评论 -
【LeetCode NO.70】爬楼梯
题目描述:假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶这是一道比较经典的动态规划入门题目——爬楼梯,可...原创 2020-08-28 11:25:16 · 135 阅读 · 0 评论