
Leetcode刷题
文章平均质量分 51
多啦ABCD梦
这个作者很懒,什么都没留下…
展开
-
Leetcode27 -- 移除元素
看到数组的题目,习惯性的思考我们是否可以用双指针的思想来做。题目要求返回的是一个长度,这种情况大概率是可以通过指针的标记位置来返回结果的。那么我们应该要解决的问题就是如何使用这个指针,解决这个问题,我们题目的解答自然而然就出来了。请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。这题很明确,输出的的移除元素后的数组长度,并且这个数组是被原地修改。的元素,并返回移除后数组的新长度。原创 2022-09-11 14:31:25 · 176 阅读 · 0 评论 -
Leetcode78 子集思路分析
Leetcode78 子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。**说明:**解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]思考过程:题目很简短,列出所有可能的子集。当看到让列出所有可能时,第一反应是回溯算法,使用递归将可能性原创 2020-11-26 17:04:57 · 129 阅读 · 0 评论 -
leetcode--上升下降字符串
Leetcode1370 上升下降字符串给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符。从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。重复步骤 5 ,直到你没法从 s 中选择字符原创 2020-11-25 15:38:59 · 162 阅读 · 0 评论 -
Leetcode刷题19--地图分析
Leetcode刷题19–地图分析你现在手里有一份大小为 N x N 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的。我们这里说的距离是「曼哈顿距离」( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个单元格之间的距离是 |x0 - x1| + |y0 - y1| 。如果网格上只有陆地或者海洋,请返回 -1。示例 1:11原创 2020-09-04 15:52:49 · 513 阅读 · 0 评论 -
Leetcode刷题18-- 和为s的两个数
Leetcode刷题18-- 和为s的两个数输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]解法 : 头尾双指针遍历class Solution: def tw原创 2020-08-01 15:27:02 · 179 阅读 · 0 评论 -
Leetcode刷题17--二叉树的镜像
Leetcode刷题17–二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]很简单,设计一个递归,将左右子树对换一定要同时赋值,否则会重复,或者使用一个temp中间变量cla原创 2020-08-01 15:26:22 · 199 阅读 · 0 评论 -
Leetcode刷题16 -- 环形链表II
Leetcode刷题16 – 环形链表II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:hea原创 2020-07-31 17:08:12 · 201 阅读 · 0 评论 -
Leetcode刷题15 -- 环形链表
Leetcode刷题15 – 环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:hea原创 2020-07-31 16:42:21 · 131 阅读 · 0 评论 -
Leetcode刷题14 --- 判断能否形成等差数列
Leetcode刷题14 — 判断能否形成等差数列给你一个数字数组 arr 。如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。示例 1:输入:arr = [3,5,1]输出:true解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成等差数列。示例 2:输入:arr = [1,2,4]输出:false解释:无法原创 2020-07-15 21:30:21 · 253 阅读 · 0 评论 -
Leetcode刷题13 --二叉树的遍历
Leetcode刷题13 --二叉树的遍历给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]解法1:借助辅助函数class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: res = [] if root is None: return原创 2020-07-15 16:37:31 · 138 阅读 · 0 评论 -
Leetcode刷题12:回文数
Leetcode刷题12:回文数判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。方法1: 各种类型转换,体现python内置函数的强大,但是运行时间和内存消耗会很严重,原创 2020-07-11 16:29:18 · 136 阅读 · 0 评论 -
Leetcode刷题11:寻找数组的中心索引
Leetcode刷题11:寻找数组的中心索引给定一个整数类型的数组 nums,请编写一个能够返回数组 “中心索引” 的方法。我们是这样定义数组 中心索引 的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:索引 3 (nums[3] = 6) 的左侧数之和 (1 + 7 + 3 = 11),与原创 2020-06-28 17:08:22 · 223 阅读 · 0 评论 -
Leetcode刷题10 -- 从尾到头打印链表
Leetcode刷题10 – 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]解法1: 暴力遍历+列表倒置class Solution: def reversePrint(self, head: ListNode) -> List[int]: if head is None: return [] res = []原创 2020-06-16 14:03:28 · 234 阅读 · 0 评论 -
Leetcode刷题09--二维数组中的查找
Leetcode刷题09–二维数组中的查找在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]原创 2020-06-10 16:14:48 · 172 阅读 · 0 评论 -
Leetcode刷题08 -- 有效的完全平方数
Leetcode刷题08 – 有效的完全平方数给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。说明:不要使用任何内置的库函数,如 sqrt。示例 1:输入:16输出:True示例 2:输入:14输出:False看到这个题目的,第一反应是用二分法,为什么是二分法呢? 因为平方数的这个特殊的属性,是同一个数的相乘,那么用二分来逼近就很符合这个场景。解法1: 二分法:def isPerfectSquare(self, num原创 2020-06-05 15:59:52 · 191 阅读 · 0 评论 -
Leetcode刷题07 - 二叉树的层序遍历
Leetcode刷题07 - 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]我的解法:def levelOrder(self, root: TreeNode) -> List[List[int]]:原创 2020-05-30 14:23:59 · 226 阅读 · 1 评论 -
Leetcode刷题06--二分查找
Leetcode刷题06–二分查找刷一道经典的算法,二分查找,虽然是经典算法但是有很多细节在写的时候也是要注意的,不经意间可能就会少加个1多加个1给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [原创 2020-05-30 13:59:41 · 247 阅读 · 0 评论 -
Leetcode刷题05---礼物的最大价值
Leetcode刷题05—礼物的最大价值本题来自剑指offer的47题在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物分析一下解题思路,这个题原创 2020-05-26 15:43:32 · 332 阅读 · 0 评论 -
Leetcode刷题04-股票的最大利润
Leetcode刷题04-股票的最大利润假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。原创 2020-05-25 15:55:27 · 431 阅读 · 0 评论 -
Leetcode刷题03-对称二叉树
Leetcode刷题03-对称二叉树请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true原创 2020-05-24 19:41:11 · 165 阅读 · 0 评论 -
Leetcode刷题02- 平衡二叉树
Leetcode 平衡二叉树什么是平衡二叉树(Balanced Binary Tree)二叉树是一种二叉排序树,它的左右子树的高度不得超过一。这是这题的关键,至于树的维护,本文不会加以描述[图片来源:百度图片]基本思路遇到二叉树的问题基本就是DFS,BFS走一波试试,这题采用了一个DFS的辅助函数,遍历过后计算树的高度辅助函数:def dfs(root): if not root: return 0 return max(dfs(root.left), dfs(root原创 2020-05-22 21:00:38 · 148 阅读 · 0 评论 -
Leetcode刷题记录01-二叉树的深度
Leetcode-二叉树的深度输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。Python解法深度优先遍历 def maxDepth(self, root: TreeNode) -> int: if root is原创 2020-05-22 18:38:49 · 251 阅读 · 0 评论