leetcode
李明朔
这个作者很懒,什么都没留下…
展开
-
从零开始刷Leetcode——字符串(13.14.20.28)
文章目录13. 罗马数字转整数14. 最长公共前缀20. 有效的括号13. 罗马数字转整数给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。class Solution: def romanToInt(self, s: str) -> int: rome = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000} length = len(s) ans =原创 2020-08-30 20:50:03 · 132 阅读 · 0 评论 -
leetcode组队学习——查找(二)
文章目录1.两数之和15. 三数之和16. 最接近的三数之和18. 四数之和454. 四数相加 II49. 字母异位词分组447. 回旋镖的数量149. 直线上最多的点数1.两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。方法1.暴力解法class Solution: def twoSum(self, nums, target):原创 2020-08-28 20:50:52 · 166 阅读 · 0 评论 -
leetcode组队学习——查找(一)
文章目录方法:考虑的基本数据结构例题202. 快乐数205. 同构字符串242. 有效的字母异位词290. 单词规律349. 两个数组的交集350. 两个数组的交集 II451. 根据字符出现频率排序方法:考虑的基本数据结构第一类: 查找有无–set元素’a’是否存在,通常用set:集合set只存储键,而不需要对应其相应的值。set中的键不允许重复第二类: 查找对应关系(键值对应)–dict元素’a’出现了几次:dict–>字典dict中的键不允许重复第三类: 改变映射原创 2020-08-25 20:54:38 · 232 阅读 · 0 评论 -
leetcode组队学习——动态规划
文章目录主要思想模板步骤例题300. 最长上升子序列674. 最长连续递增序列5. 最长回文子串516. 最长回文子序列72. 编辑距离198. 打家劫舍213. 打家劫舍 II主要思想若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复计算很多相同的子问题,利用动态规划的思想可以减少计算量。动态规划法仅仅解决每个子问题一次,具有天然剪枝的功能,从而减少计算量,一旦某个给定子问题的解原创 2020-08-23 20:29:44 · 176 阅读 · 0 评论 -
Leetcode组队学习——分治
文章目录主要思想分治算法的步骤分治法适用的情况伪代码3道例题169.多数元素53.最大子序和50. Pow(x, n)主要思想分治算法的主要思想是将原问题递归地分成若干个子问题,直到子问题满足边界条件,停止递归。将子问题逐个击破(一般是同种方法),将已经解决的子问题合并,最后,算法会层层合并得到原问题的答案。分治算法的步骤分:递归地将问题分解为各个的子问题(性质相同的、相互独立的子问题);治:将这些规模更小的子问题逐个击破;合:将已解决的子问题逐层合并,最终得出原问题的解分治法适用的原创 2020-08-18 20:52:09 · 188 阅读 · 0 评论 -
从零开始刷Leetcode——动态规划(70.198.303)
文章目录70. 爬楼梯198. 打家劫舍303. 区域和检索 - 数组不可变动态规划属于热门问题,在leetcode中主要以medium和hard为主。70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。class Solution: def climbStairs(self, n: int) -> int: if n==1: retu原创 2020-07-21 20:58:08 · 100 阅读 · 0 评论 -
从零开始刷Leetcode——数组(941.977)
文章目录941. 有效的山脉数组977. 有序数组的平方三级目录941. 有效的山脉数组给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:A.length >= 3在 0 < i < A.length - 1 条件下,存在 i 使得:A[0] < A[1] < … A[i-1] < A[i]A[i] > A[i+1] > … > A[A.len原创 2020-07-21 20:37:37 · 79 阅读 · 0 评论 -
从零开始刷Leetcode——数组(896.905.914.922)
文章目录896. 单调数列905. 按奇偶排序数组914. 卡牌分组922. 按奇偶排序数组 II896. 单调数列如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。当给定的数组 A 是单调数组时返回 true,否则返回 false。1.两次for循环class Solution: def isMono原创 2020-07-14 20:57:22 · 153 阅读 · 0 评论 -
从零开始刷Leetcode——数组(830.849.888)
文章目录830. 较大分组的位置849. 到最近的人的最大距离888. 公平的糖果交换830. 较大分组的位置在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组。例如,在字符串 S = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组。我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的起始和终止位置。最终结果按照字典顺序输出。1.顺序遍历class Solution: def原创 2020-07-13 21:02:38 · 133 阅读 · 0 评论 -
从零开始刷Leetcode——数组(746.747)
文章目录747. 至少是其他数字两倍的最大数746. 使用最小花费爬楼梯747. 至少是其他数字两倍的最大数在一个给定的数组nums中,总是存在一个最大元素 。查找数组中的最大元素是否至少是数组中每个其他数字的两倍。如果是,则返回最大元素的索引,否则返回-1。class Solution(object): def dominantIndex(self, nums): m = max(nums) if all(m >= 2*x for x in n原创 2020-07-12 19:45:52 · 113 阅读 · 0 评论 -
从零开始刷Leetcode——数组(31.33)
文章目录31. 下一个排列33. 搜索旋转排序数组31. 下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。例:123变成132;115变成1511.排序+遍历class Solution: def nextPermutation(self, nums: List[int]) -> None: """原创 2020-06-01 11:30:00 · 100 阅读 · 0 评论 -
从零开始刷Leetcode——数组(11.15.16.18)
文章目录11. 盛最多水的容器二级目录三级目录前800题easy难度想做的已经做完了,之后是medium难度11. 盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。1.暴力法class Solution { public int ma原创 2020-05-27 11:43:30 · 117 阅读 · 0 评论 -
从零开始刷Leetcode——数组(697.717.724)
文章目录697. 数组的度717. 1比特与2比特字符724. 寻找数组的中心索引697. 数组的度给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。1,三个字典class Solution: def findShortestSubArray(self, nums: List[int]) -> int: max_count = 0原创 2020-05-24 20:17:31 · 135 阅读 · 0 评论 -
从零开始刷Leetcode——数组(643.665.674)
文章目录643. 子数组最大平均数 I665. 非递减数列674. 最长连续递增序列643. 子数组最大平均数 I给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。1.滑窗遍历class Solution: def findMaxAverage(self, nums: List[int], k: int) -> float: length = len(nums) value = value_int = sum(nums[:k原创 2020-05-22 21:03:32 · 150 阅读 · 0 评论 -
从零开始刷Leetcode——数组(581.605.628)
文章目录581. 最短无序连续子数组605.种花问题628. 三个数的最大乘积581. 最短无序连续子数组给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。1.排序class Solution: def findUnsortedSubarray(self, nums: List[int]) -> int: num1 = sorted(nums) left原创 2020-05-21 20:23:50 · 122 阅读 · 0 评论 -
从零开始刷Leetcode——数组(532.561)
文章目录532. 数组中的K-diff数对561. 数组拆分 I532. 数组中的K-diff数对给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对。这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k.1.哈希表class Solution: def findPairs(self, nums: List[int], k: int) -> int: dict = {}原创 2020-05-20 21:00:33 · 156 阅读 · 0 评论 -
从零开始刷Leetcode——数组(448.485.509)
文章目录448. 找到所有数组中消失的数字485.最大连续1的个数509. 斐波那契数448. 找到所有数组中消失的数字给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。要求不使用额外空间且时间复杂度为O(n),返回的数组不算在额外空间内。1.利用额外的列表class Solution: def findDisappearedNumbers(self,原创 2020-05-19 21:28:23 · 117 阅读 · 0 评论 -
从零开始刷Leetcode——数组(268.283.414)
文章目录268.缺失数字二级目录三级目录268.缺失数字给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。1.排序class Solution: def missingNumber(self, nums: List[int]) -> int: length = len(nums) nums.sort() for i in range(length): if原创 2020-05-18 20:47:21 · 144 阅读 · 0 评论 -
从零开始刷Leetcode——数组(189.217.219)
文章目录189.旋转数组217.存在重复元素217.存在重复元素 II189.旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。1.定义一个新数组class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """原创 2020-05-15 20:56:33 · 115 阅读 · 0 评论 -
从零开始刷Leetcode——数组(122.167.169)
文章目录122.买卖股票的最佳时机 II167.两数之和II169.多数元素122.买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。1.一次遍历class Solution: def maxProfit(self, prices: List[int]) -> int: m原创 2020-05-14 21:17:49 · 158 阅读 · 0 评论 -
从零开始刷Leetcode——数组(118.119.121)
文章目录119.杨辉三角2118.杨辉三角121.买卖股票的最佳时机119.杨辉三角2给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。1.找规律class Solution: def getRow(self, rowIndex: int) -> List[int]: list1 = [1] for i in range(rowIndex): list1.inse原创 2020-05-13 21:11:11 · 124 阅读 · 0 评论 -
从零开始刷Leetcode——数组(66.88)
文章目录66.加一88.合并两个有效数组本次是66、8866.加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。例如,[9, 9]加一变成[1, 0, 0]1.反向遍历class Solution: def plusOne(self, digits: List[int]) -> List[int]: length = len(dig原创 2020-05-12 21:30:41 · 147 阅读 · 0 评论 -
从零开始刷Leetcode——数组(27.35.53)
文章目录27.移除元素35.搜索插入位置53.最大子序和今天是27.35.53题。27和昨天的26题思想差不多,35比较简单,53确实想了一段时间。27.移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。1.反向遍历class Solution: def removeElem原创 2020-05-11 21:08:36 · 144 阅读 · 0 评论 -
从零开始刷Leetcode——数组(1.26)
文章目录1.两数之和26.删除排序数组中的重复项马上要去读研了,作为一个转码的ee学生,刷题还是很必要的。从零开始,希望能坚持下去!打算按照类别和难度慢慢刷,一天两三道题左右,争取明年夏季找实习之前能刷完,最差也得把easy和medium过一遍。编程语言为Python,水平有限,要是有更快的解法可以教教我第一次是数组easy难度的1、26,比较菜,一开始慢点来1.两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可原创 2020-05-10 21:42:10 · 167 阅读 · 0 评论