leetcode-python
iddd
这个作者很懒,什么都没留下…
展开
-
leetcode--合并链表
148. 排序链表合并单个链表,参数是一个链表头节点给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def sortList(self,原创 2021-08-28 14:20:06 · 266 阅读 · 0 评论 -
二叉树容易做混的几道题
101. 对称二叉树给定一个二叉树,检查它是否是镜像对称的。# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def isSymm原创 2021-08-25 14:14:02 · 267 阅读 · 0 评论 -
路径总和相关
核心思想就是回溯,二叉树的回溯,模板都差不多112. 路径总和根节点到叶子节点给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# sel原创 2021-08-24 23:30:23 · 165 阅读 · 0 评论 -
leetcode--前缀和
560. 和为K的子数组class Solution(object): def subarraySum(self, nums, k): """ :type nums: List[int] :type k: int :rtype: int """ res = 0 hash = collections.defaultdict(int) hash[0] = 1原创 2021-07-19 01:08:50 · 95 阅读 · 0 评论 -
leetcode--滑动窗口
3. 无重复字符的最长子串用一个队列存储for循环的字母,如果字母在队列中,就把所有的该元素之前的元素全部pop掉,否则append进去,同时记录最长长度class Solution: def lengthOfLongestSubstring(self, s: str) -> int: queue = collections.deque() n, max_length, start, cur_length = len(s), 0, 0, 0原创 2021-07-19 00:26:57 · 168 阅读 · 0 评论 -
回溯算法总结
46. 全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案class Solution(object): def permute(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ def backtrack(path, used): if len(path)原创 2021-07-02 01:08:00 · 185 阅读 · 0 评论 -
背包问题总结
什么是背包问题背包问题是一类经典的动态规划问题,它非常灵活。背包问题的特征: 一般有个target,求组成target的组合方式等等分类: 0-1背包问题、完全背包问题0-1背包问题:数组中的元素不能重用,外层遍历数组,内层逆序遍历target。完全背包问题:数组中的元素可以重复使用不考虑数组的顺序,外层遍历数组,内层顺序遍历target考虑数组的顺序,外层遍历target,内层遍历数组leetcode494:目标和0-1背包问题给你一个整数数组 nums 和一个整数 target原创 2021-06-25 22:57:35 · 273 阅读 · 0 评论 -
leetcode--python--hot10--437
路径总和 III给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。方法一: 双重递归——双重递归的操作需要从每个节点开始进行类似的计算,所以第一个递归用来遍历这些节点,第二个递归用来处理这些节点,进行深度优先搜索# Definition for a binary tree node.# class TreeNode(object):# def __init_原创 2021-06-20 20:43:47 · 135 阅读 · 0 评论 -
leetcode--python--hot100--221
最大正方形方法一:暴力法,有很多细节注意class Solution: def maximalSquare(self, matrix: List[List[str]]) -> int: if not matrix: return 0 max_length = 0 for i in range(len(matrix)): for j in range(len(matrix[0])):原创 2021-06-09 00:35:13 · 152 阅读 · 2 评论 -
leetcode--python--hot100--207
课程表你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false思路参考,代码参考f原创 2021-06-08 00:15:28 · 156 阅读 · 0 评论 -
python中的__call__魔法函数
总的来说__call__魔法函数将类变为了一个可调用对象。class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __call__(self, friend): print ('My name is %s...' % self.name) print ('My friend is %s.原创 2021-06-07 15:09:44 · 190 阅读 · 0 评论 -
leetcode--python--hot100--200
岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围class Solution(object): def numIslands(self, grid): """ :type grid: List[List[str]] :rtype: rint """原创 2021-06-07 00:14:13 · 127 阅读 · 0 评论 -
leetcode--python--hot00--打家劫舍
198你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。class Solution(object): def rob(self, nums): """ :type nums: List[int] :rtyp原创 2021-06-06 23:38:22 · 107 阅读 · 0 评论 -
leetcode--python--hot100--152
乘积最大子数组给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积class Solution(object): def maxProduct(self, nums): """ :type nums: List[int] :rtype: int """ #空间复杂度O(N) # max_dp, min_dp = [nums[0]]原创 2021-06-06 16:42:10 · 150 阅读 · 0 评论 -
leetcode--python--hot100--148
排序链表给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表采用归并排序的方法,要注意下细节。# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object): def sortLi原创 2021-06-06 14:58:06 · 117 阅读 · 0 评论 -
leetcode--python--hot100--128
最长连续序列给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度注意重复元素的情况,第一种方法中用same表示元素重复的数量;方法一时间复杂度为排序的复杂度,方法二为o(n)class Solution(object): def longestConsecutive(self, nums): """ :type nums: List[int] :rtype: int """原创 2021-06-02 23:48:18 · 101 阅读 · 0 评论 -
leetcode--python--hot100--124
二叉树中的最大路径和路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, righ原创 2021-06-02 22:41:26 · 120 阅读 · 0 评论 -
leetcode--python--hot100--114
二叉树展开为链表# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def flatten(self, root: TreeNode) -原创 2021-06-01 22:40:51 · 122 阅读 · 0 评论 -
leetcode--python--hot100--96
不同的二叉搜索树给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数方法:动态规划,这道题很简单,注意细节,dp数组必须是n+1长度,第二个for循环中是range(1,i+1)不是range(0,i+1)class Solution(object): def numTrees(self, n): """ :type n: int :rtype: int原创 2021-05-27 21:10:57 · 106 阅读 · 0 评论 -
leetcode--python--hot100--85
最大矩形给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积思路: 先求每一行中每一列中1的最大数,剩下的按照84题柱状图最大面积求解class Solution(object): def maximalRectangle(self, matrix): """ :type matrix: List[List[str]] :rtype: int """原创 2021-05-27 14:23:01 · 114 阅读 · 0 评论 -
leetcode--python--hot100--84
柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。方法一: 暴力遍历法,暴力循环每个柱子,然后在该位置向左遍历找到第一个小于当前高度的柱子,向右找到第一个小于当前高度的柱子,计算面积。时间复杂度O(N2)class Solution: def largestRectangleArea(self, heights: List[int]) -> int: # #方法1,原创 2021-05-27 09:42:56 · 146 阅读 · 0 评论 -
leetcode--python--hot100--79
单词搜索给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。代码解析: backtrack用来判定对于某个以word[0]开头的board中的一个字母,剩余的是否能形成word;主函数用来遍历所有字母class Solution(object): de原创 2021-05-25 14:45:28 · 154 阅读 · 0 评论 -
leetcode--python--hot100--78
子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集方法一: 迭代,参考原创 2021-05-24 16:21:35 · 118 阅读 · 0 评论 -
leetcode--python--hot100--76
最小覆盖子串给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。注意: 细节很多class Solution(object): def minWindow(self, s, t): """ :type s: str :type t: str :rtype: str原创 2021-05-21 13:53:06 · 105 阅读 · 0 评论 -
leetcode--python--hot100--144
二叉树的前序遍历递归很简单,注意迭代法。迭代法思路:先将根节点的左节点全部压入栈中,通过一个for循环完成,然后弹出栈顶元素,没弹出一个栈顶元素,就将其赋值给root,然后将这个root再进行上面的迭代# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val#原创 2021-05-21 10:00:35 · 71 阅读 · 0 评论 -
leetcode--python--hot100--75
颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色2种方法,方法1亏快排,方法二双指针class Solution(object): def sortColors(self, nums): """ :type nums: List[int] :rtype: None Do not return原创 2021-05-19 21:19:51 · 140 阅读 · 0 评论 -
leetcode--python--394
字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入难点:如何处理括号包含括号的情况方法:辅助栈class Solution(object)原创 2021-05-19 16:20:32 · 115 阅读 · 0 评论 -
leetcode--python--hot100--62
不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?方法一:class Solution(object): def uniquePaths(self, m, n): """ :type m: int :type n: int :rtype: int原创 2021-05-18 13:55:46 · 69 阅读 · 0 评论 -
leetcode--python--hot100--56
合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间注意:像[1,4][5,6]是不能合并的,必须是[4,6]才能合并class Solution(object): def merge(self, intervals): """ :type intervals: List[List[int]]原创 2021-05-18 10:49:40 · 71 阅读 · 0 评论 -
leetcode--python--hot100--55
跳跃游戏给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标.class Solution(object): def canJump(self, nums): """ :type nums: List[int] :rtype: bool """ n = len(nums) right_most = 0原创 2021-05-18 09:17:46 · 107 阅读 · 0 评论 -
leetcode--python--hot100--49
字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。方法一:class Solution(object): def groupAnagrams(self, strs): """ :type strs: List[str] :rtype: List[List[str]] """ #排序+哈希 dic = collections.defaultdict(原创 2021-05-17 21:25:33 · 82 阅读 · 0 评论 -
leetcode--python--hot100--48
旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像方法1:class Solution(object): def rotate(self, matrix): """ :type matrix: List[List[int]] :rtype: None Do not return anything,原创 2021-05-17 20:13:45 · 111 阅读 · 0 评论 -
leetcode--python--hot100--42
接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水方法一: 暴力法class Solution(object): def trap(self, height): """ :type height: List[int] :rtype: int """ #暴力时间复杂度o(N2),测试用例会超时 #计算每个柱子顶部可以存水量,每个柱子顶部可以存水量原创 2021-05-17 16:47:38 · 129 阅读 · 0 评论 -
leetcode--python--hot100--34
在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。注意:这道题细节很多,也要考虑到target不在数组中的情况class Solution(object): def searchRange(self, nums, target): """ :type nums: List[int]原创 2021-05-16 22:02:22 · 120 阅读 · 0 评论 -
leetcode--python--hot100--33
搜索旋转排序数组整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums原创 2021-05-16 20:43:24 · 181 阅读 · 0 评论 -
leetcode--python--hot100--19
删除链表的倒数第 N 个结点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object): def removeNthFromEnd(原创 2021-05-15 21:23:30 · 93 阅读 · 0 评论 -
leetcode--python--之字形打印矩阵
如上图所示的矩阵打印:方法: 先设置2个指针,移动时a指针向下,b指针向右,当a走到最下面的时候向右移动,当b中移动到最右边的时候,向下移动,知道a==bdef z_print_mtrix(mtrix): a_x, a_y, b_x, b_y = 0, 0, 0, 0 x_length = len(mtrix) - 1 y_length = len(mtrix[0]) - 1 reverse_flag = True while b_x != x_length +.原创 2021-05-15 20:39:20 · 614 阅读 · 0 评论 -
leetcode--python--470
已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。# The rand7() API is already defined for you.# def rand7():# @return a random integer in the range 1 to 7class Solution(object): def rand10(self):原创 2021-05-15 12:02:03 · 151 阅读 · 0 评论 -
leetcode--python--hot100--23
合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。方法: 分治算法,参考# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object):原创 2021-05-14 21:47:04 · 95 阅读 · 0 评论 -
依行科技日常实习面经
3道题,第一道是leetcode207,第二道不知道是哪的题,第三道leetcode470原创 2021-05-14 21:00:50 · 372 阅读 · 4 评论