LeetCode
Whisper321
这个作者很懒,什么都没留下…
展开
-
LeetCode myPow Python3
题目描述: 实现 pow(x, n) 函数,即实现 x 的 n 次幂函数示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.00000, -2输出: 0.25000这道题直接暴力累乘会超时,比较多用的是快速幂算法,将所求的幂次折半计算,例如:24=22×22,2^4 = 2^2 \times 2^2, 24=22×22, 25=22×22×22^...原创 2019-07-03 11:15:11 · 230 阅读 · 0 评论 -
LeetCode levelOrder Python3
题目描述: 给定一颗二叉树,返回其按层次遍历的节点值(即逐层地,从左到右访问所有节点)示例:输入:[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]这道题很容易想到使用 BFS 按层遍历二叉树的所有节点,比较困难的点在于输出的形式:需要将同层的节点组合在一起,所以使用一个临时队列 temp_q 记录下一层的节点,当 queue 中的节点全部...原创 2019-07-15 21:23:29 · 164 阅读 · 0 评论 -
LeetCode numTrees Python3
题目描述:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5这道题按我的思路就是暴力递归枚举所有情况,但是官方题解给了一种动态规划的巧妙解法,这里记录一下:给定一个有序递增序列,为了构建二叉搜索树,可以遍历所有数字 i ,然后 i 左侧的序列作为左子树,右侧的序列作为右子树,然后递归的生成二叉树,也就是递归找到所有情况的方法。为了避免重复,采...原创 2019-07-16 21:49:53 · 190 阅读 · 0 评论 -
使用 Python 刷题时可能会用到的技巧
在使用 Python 刷题的过程中发现了许多以前不知道的操作,用这篇博客记录一下,持续更新。字典的具体实现就是一个哈希表,所以只要是 hashable 的对象都可以作为 key,比如 tuple,就是说可以直接使用一个元组作为字典的键,但是列表是不可以的。w = (1,2,3)i = (2,3,4)dic = {w:1, i:2}print(dic[w])out: 1sort...原创 2019-07-19 22:15:58 · 221 阅读 · 0 评论 -
LeetCode sortList Python3
题目描述:在 O(nlogn) 时间复杂度和常数空间复杂度下对链表进行排序。其实这道题我并没有完成,使用递归方法空间复杂度 O(logn),但是非递归的归并排序实在是麻烦,就先作罢了。我从题解学到了一个用快慢指针一次遍历找到链表中点的方法,比我以前用的两次法显然好的多,这里记录一下。代码如下:# Definition for singly-linked list.# class ListNo...原创 2019-07-25 22:02:58 · 132 阅读 · 0 评论 -
LeetCode insertionSortList Python3
题目描述:对链表进行插入排序。本来这道题目是真的打算按一般的插入排序一样每次从后往前移动元素的,但是尝试之后发现并做不到,只好还是按照链表的顺序从前往后寻找插入点,然后一次性插入,也不知道这还叫不叫插入排序…… 这里有个感觉好用的技巧,一般链表操作我们总会给表头一个引用,比如 cur = head,然后对 cur 进行操作,以便最后找到表头。这道题这样是不行的,因为表头元素本身也在移动,所以给链...原创 2019-07-22 23:04:30 · 117 阅读 · 0 评论 -
LeetCode minSubArrayLen Python3
题目描述: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出数组中满足其和 ≥ s 的长度最小的连续子数组的长度。如果不存在符合条件的连续子数组,返回 0示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2这道题是一道典型的双指针滑动窗口的题目,记录一下:def minSubArrayLen(s, nums): if not nums: retur...原创 2019-07-26 22:41:26 · 350 阅读 · 0 评论 -
LeetCode kthSmallest Python3
题目描述: 给定一个二叉搜索树,编写一个函数来寻找其中第 k 个最小元素。(假设 k 总是有效的)二叉搜索树的好性质就是左子树中的元素总小于根节点,右子树中的元素总大于根节点,因此二叉搜索树的中序遍历返回的就是一个排序了的数组,找到第 k 个元素即可,还可以对遍历计数,从而实现早停,进一步优化时间复杂度。我自己写了一个非递归的,另外附上别人实现的递归写法def kthSmallest(root...原创 2019-07-31 22:50:10 · 143 阅读 · 0 评论 -
LeetCode maxCoins Python3
题目描述: 有n个气球,编号为0到n-1,每个气球上都标有一个数字,存在数组nums里。现在要戳破所有气球,每当戳破一个气球i,你就得到nums[left]*nums[i]*nums[right]个硬币。注意当你戳破第i个气球后,气球left和气球right就变成了相邻的气球。求所能获得的最大硬币数量。你可以假设nums[-1] = nums[n] = 1,但这是虚拟的,不能戳破。示例:输入...原创 2019-08-08 21:47:18 · 309 阅读 · 0 评论 -
LeetCode200 numIslands and LeetCode79 exist Python3
岛屿数量题目描述:给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。可以假设网格的四个边均被水包围。示例:输入:11000110000010000001输出: 3岛屿数量是一道深度优先搜索的题目,它与回溯法之间就是差了一个不满足就回头的步骤。初始化一个用来记录访问过位置的矩阵。首先遍历...原创 2019-08-16 21:04:05 · 143 阅读 · 0 评论 -
LeetCode547 findCircleNum Python3
题目描述:班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。...原创 2019-09-19 15:37:38 · 361 阅读 · 0 评论 -
LeetCode groupAnagrams Python3
题目描述:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]这道题让我知道了,原来在 Python 中 tuple 是 hashable 的,也就是说可以拿...原创 2019-07-15 20:10:54 · 109 阅读 · 0 评论 -
LeetCode addTwoNumbers Python3
题目描述:给出两个 非空链表 来表示两个非负整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果将这两个数加起来,则会返回一个新的 链表 来表示它们的和。可以假设除了数字 0 以外,这两个数不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出: 7 -> 0 -> 8原因...原创 2019-06-13 12:35:04 · 120 阅读 · 0 评论 -
LeetCode isSameTree Python3
题目描述: 给定两个二叉树,编写一个函数来检验它们是否相同。如果两棵树结构相同,并且同位置节点具有相同的值,则认为它们相同。来源:力扣(LeetCode)https://leetcode-cn.com/problems/valid-sudoku这道题是道很简单的题,我用的是树的先序遍历,虽然我没试,但是估计中序跟后序应该也可以。但要注意的是要改变一下原本遍历函数的递归出口,改成当指到的子树...原创 2019-06-27 21:20:45 · 142 阅读 · 0 评论 -
LeetCode searchMatrix Python3
题目描述: 编写一个高效算法来判断 MxN 矩阵中,是否存在一个目标值。该矩阵具有以下性质:每行中的整数从左至右按升序排列每行的第一个整数大于前一行的最后一个整数示例 :输入: matrix = [[1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]], target = 3输出: true使用 Python 使用 in 语句可以...原创 2019-06-26 22:40:46 · 132 阅读 · 0 评论 -
LeetCode mySqrt Python3
题目描述: 实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。因为返回值是整数,所以结果只保留整数部分,小数部分被直接舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2这道题本身并不难,用二分法可以找到。但是答案里有一种运用数值方法的解法很高效,而且对于类似的数学问题,比如方程求根,优化等问题都可以使用。求解牛顿法的迭代表达式...原创 2019-06-26 12:53:12 · 388 阅读 · 0 评论 -
LeetCode isValidSudoku Python3
题目描述:判断一个 9x9 的数独是否有效。验证已经填入的数字即可,判断规则如下:数字 1-9 每行只能出现一次数字 1-9 每列只能出现一次数字 1-9 在每一个以粗线划分的 3x3 宫内只能出现一次来源:力扣(LeetCode)https://leetcode-cn.com/problems/valid-sudoku数独部分空格内填入了数字,空白格用 “.” 来表示。示例 :...原创 2019-06-25 20:11:48 · 167 阅读 · 0 评论 -
LeetCode nextPermutation Python3
题目描述:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将其重新排列成最小的排序(即按升序排列)。注意:必须原地修改,只能使用额外的常数空间示例 :一 : 1,2,3 -> 1,3,2二 : 3,2,1 -> 1,2,3三 : 1,1,5 -> 1,5,1实话说这题背后的数学原理我还没弄懂,这里先记录...原创 2019-06-24 16:00:31 · 109 阅读 · 0 评论 -
LeetCode letterCombinations Python3
题目描述:给定一个仅包含数字 2-9 的字符串,返回所有他能表示的字母组合,给出数字到字母的映射如下(与电话按键相同)。2 :‘abc’, 3 :‘def’, 4 :‘ghi’, 5 :‘jkl’, 6 :‘mno’, 7 :‘pqrs’, 8 :‘tuv’, 9 :‘wxyz’示例:输入: “23”输出: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”...原创 2019-06-24 10:52:48 · 272 阅读 · 0 评论 -
LeetCode generateParenthesis Python3
题目描述:给出 n 代表生成括号的对数,写出一个函数,使其能够生成所有有效括号组合。示例:输入: n = 3输出: [’((()))’, ‘(()())’, ‘(())()’, ‘()(())’, ‘()()()’]这道题我的思路是递归生成二叉树,并在生成过程中减枝。进入左子树条件:左括号数小于 n进入右子树条件:右括号数小于左括号数def generateParenthesi...原创 2019-06-23 22:23:47 · 133 阅读 · 0 评论 -
LeetCode divide Python3
题目描述:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。示例 1:输入: dividend = 10, divisor = 3输出: 3示例 2:输入: dividend = -7, divisor = 3输出: -2注意:除数不为 0, 且环...原创 2019-06-21 23:07:55 · 160 阅读 · 0 评论 -
LeetCode swapPairs Python3
题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入: 1 -> 2 -> 3 -> 4输出: 2 -> 1 -> 4 -> 3这里只给出递归解法的代码,因为限制于本人水平,迭代解法没有图真的很难说清楚……:class Solution: def swa...原创 2019-06-18 22:24:44 · 287 阅读 · 0 评论 -
LeetCode findMedianSortedArrays Python3
题目描述:给定两个大小为 m 和 n 的有序数组 A 和 B 。找出这两个有序数组的中位数,并且要求算法时间复杂度为 O(log(m+n))。可以假设这两个数组不会同时为空。示例 1:输入: A = [1,3], B = [2]输出: 2.0示例 2:输入: A = [1,2], B = [3,4]输出: (2+3) / 2 = 2.5其实如果没有时间复杂度的要求,这个问题用 P...原创 2019-06-13 17:58:48 · 189 阅读 · 0 评论 -
LeetCode334 increasingTriplet Python3
题目描述:给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。要求:时间复杂度为O(N),空间复杂度为O(1)示例 1:输入: [1,4,3,5,6]输出: true示例 2:输入: [5,4,3,2,1]输出: false这道题目因为严格的时间复杂度和空间复杂度,要使用一种“维护最小有序子序列”方法,记得在别的地方也见过。在这道题中,就是维护一个定长的有序数组,...原创 2019-09-29 16:41:09 · 99 阅读 · 0 评论