LeetCode
BIggyGuan
这个作者很懒,什么都没留下…
展开
-
Leetcode 并查集模板
class UnionFind: def __init__(self, n): self.count = n self.p = [i for i in range(n)] def parent(self, i): root = i while self.p[root] != root: root = self.p[root] while self.p[i] != i:原创 2021-03-08 17:40:35 · 253 阅读 · 0 评论 -
Leetcode-721 账户合并
题目(此题还可用作合并 json 数据) 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。 现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的账户,但其所有账户都具有相同的名称。 合并账户后,按以下格式原创 2021-01-18 16:14:03 · 118 阅读 · 0 评论 -
快速排序实现
def partation(arr, left, right): pivot = arr[left] while left < right: while left < right and arr[right] >= pivot: right -= 1 arr[left] = arr[right] while left < right and arr[left] <= pivot:原创 2020-11-21 00:32:10 · 97 阅读 · 0 评论 -
Leetcode 22 括号生成
题目 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例: 输入:n = 3 输出:[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ] 题解 使用暴力枚举的方法列出所有的生成括号的情况然后,通过判断 isvalid 来将结果添加到result中 class Solution: def generateParenthesis(self, n: int) -> List[str]:原创 2020-08-28 14:58:50 · 93 阅读 · 0 评论 -
Leetcode 剑指offer 52 两个链表的第一个公共节点
题目 输入两个链表,找出它们的第一个公共节点。 题解 class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: node1, node2 = headA, headB while node1 != node2: node1 = node1.next if node1 else headB原创 2020-08-23 23:32:56 · 124 阅读 · 0 评论 -
Leetcode 647 回文子串
题目 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 示例 1: 输入:“abc” 输出:3 解释:三个回文子串: “a”, “b”, “c” 示例 2: 输入:“aaa” 输出:6 解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa” class Solution: def countSubstrings(self, s: str) -> int:原创 2020-08-21 15:20:17 · 106 阅读 · 0 评论 -
Leetcode 111 二叉树最小深度
题目 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 题解 DFS: class Solution: def minDepth(self, root: TreeNode) -> int: if not root: return 0 if not root.left and not root.right: return 1原创 2020-08-21 14:52:45 · 113 阅读 · 0 评论 -
二分搜索的三种模板
1 查找target是否在数组中,没有返回-1 def binarySearch(nums, target): left, right = 0, len(nums) -1 while left <= right: mid = (left + (right - left)) // 2 if nums[mid] > target: right = mid - 1 elif nums[mid] < targe原创 2020-08-20 16:17:04 · 242 阅读 · 0 评论 -
Leetcode 529 扫雷游戏
题目描述 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。 现在给出在所有未挖出的方块中(‘M’或者’E’)的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板: 如果一个地雷(‘M’)被挖出,游戏就结束了- 把它改为 ‘X’。 如果一个没有相邻地雷的空方块(原创 2020-08-20 11:38:00 · 173 阅读 · 0 评论 -
回溯算法 全排列模板
输入一个不重复数组作为可选 输出全排列组合 class Solution: def permute(self, nums: List[int]) -> List[List[int]]: # 回溯算法 result = [] track = [] # 可行路径 def trackBack(nums_, track_): if len(track_) == len(nums_): # 满足终止条件 .原创 2020-08-19 16:40:38 · 136 阅读 · 0 评论 -
Leetcode 110 平衡二叉树
题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 题解 class Solution: def isBalanced(self, root: TreeNode) -> bool: def height(root): if not root: return False leftHeight = hei原创 2020-08-18 16:07:39 · 102 阅读 · 0 评论 -
OJ系统输入输出python
单行输入 n, m = map(int, sys.stdin.readline().strip().split()) 多行输入原创 2020-07-28 10:47:13 · 374 阅读 · 0 评论 -
Leetcode剑指offer 24 反转链表
义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NUL # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None clas原创 2020-08-18 11:16:09 · 121 阅读 · 0 评论 -
Leetcod 剑指offer 59 滑动区间最大值
思路 维护一个单调递减队列,使得每次在一个新的区间中向结果数组添加元素都可以按照O(1)时间复杂度获取元素。单调队列保存元素坐标 队首元素为最大值,每当i 循环到一个新的元素时,判断其与单调队列中的元素的大小关系,如果比队尾元素小就直接加入队列,如果比队尾元素大,就不断删除队尾元素,然后找到合适的位置 将i位置元素append到单调队列中 不断循环判断队首元素坐标是否在滑动区间范围之内,如果不在就将队首元素移除 只要检测 i 元素的滑动区间大小比要求的大, 就将单调队列中的最大值添加到result 数组中原创 2020-08-17 15:18:59 · 389 阅读 · 0 评论 -
LeetCode 49 字母异位词分组
Leetcode 49 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 示例: 输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [ [“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”] ] 思路 使用一个dictionary将排序过的每个输入样例排序字母顺序保证验证相同的key。通过tuple作为键值进行存储因为在原始数据结构当中,只有tuple可以作为字典的键,d原创 2020-08-10 10:52:04 · 182 阅读 · 0 评论