归档
时光荏苒,文字留痕
共 19 篇文章
leetcode-179. 最大数
179. 最大数 这个题,如果用简单的数字进行比较,肯定是行不通的,例如样例2的输入[3,30,34,5,9],如果单纯比较大小,30比9大,但是930反而是比309更大的。如果转换成字符串,用字典序排序,又存在3和30,因为3没有第二位,第一位又相同,就导致30字典序更大排在前面,但是330是比3
leetcode-1438. 绝对差不超过限制的最长连续子数组
1438. 绝对差不超过限制的最长连续子数组 这个题目看到要找一个最长连续的子数组,就可以知道肯定是要
leetcode-239. 滑动窗口最大值
239. 滑动窗口最大值 这个题属于滑动窗口,维护一个定长的窗口,但是需要用到一个重要的知识就是单调队列。单调队列是怎么实现的呢?遍历到一个元素,和队尾的元素进行比较,如果队尾的元素比当前元素要小,就移除去。直到当前的队尾元素比当前元素要大,然后把当前元素追加到队尾。那么这个队列的队头一定是当前窗口
leetcode-136. 只出现一次的数字
136. 只出现一次的数字 题目让我们在一个数组里面,找到一个没有重复元素的元素。首先我想到的是使用哈希表,统计每个元素的数量,如果这个元素的数量是1,自然就是出现只有一次的数字,代码如下: class Solution: def singleNumber(self, nums: Li
leetcode动态规划基础练习题
509. 斐波那契数 这个题目根据题意,暴力解法就是一个简单的递归,求$fib(n)$的值,我们求$fib(n-1)+fib(n-2)$就可以了。当n是0,1,2的时候就是fib函数的一个基础状态。终止递归的条件。但是这个效率很低,时间复杂度是$O(2^n)$。 class Solution:
leetcode二叉树基础练习题
104. 二叉树的最大深度 这个题我们用两种思路考虑,第一种是分解的思路,求root的最大深度,那不就是左子树和右子树的最大深度加1就行了,对于左子树来说,它的最大深度又是它的左右子树的最大深度加1,对于每个节点,考虑的问题是一样的。对于代码,如果一个节点为None,深度也就是0,这是递归的终止条件
leetcode滑动窗口练习题
滑动窗口是一种很高效的寻找特定情况字串的一种算法。一个题求某种符合条件的字串,穷举的话就只能是固定起点和终点。然后获取到所有的字串,判断是否符合条件,时间复杂度是$O(n^2)$.而滑动窗口看似是两个嵌套的循环,但是对于字符串的每个字符来说,都只被遍历了一遍,所以时间复杂度是$O(n)$ 滑动窗口的
leetcode数组双指针练习题
26. 删除有序数组中的重复项 如果不是原地修改,我们完全可以new一个新数组,然后从头到尾遍历一遍,把不重复的元素添加到新数组里面。但是这个题要求原地修改,也就是只能在原数组上面进行一些操作。使用快慢双指针。让快指针在前面走。遇到相同的就跳过继续往后走,遇到不同的,就让s
leetcode链表双指针练习题
21. 合并两个有序链表 将两个升序链表合并成新的升序链表,只需要创建一个新的链表,把两个指针分别放到链表A和链表B的头部,然后不停的
leetcode-1979. 找出数组的最大公约数
题目链接:1979. 找出数组的最大公约数 这个题还是非常简单的,返回数组最大数和最小数的最大公约数,我们要找最大数和最小数,直接排个序不就行了. Python代码如下: import math class Solution: def findGCD(self, nums: List[int