自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 LeetCode 767 重构字符串

给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例1:输入: S = "aab"输出: "aba"示例 2:输入: S = "aaab"输出: ""本题采用贪心算法和堆来求解。我们尽可能向构造的字符串中加入剩余数量多的字符,这样避免剩余过多的单一字符,最后相邻。每次选出剩余最多的两个字符就可以避免和以构造的字符串末尾同。import heapqfrom collections impo.

2020-11-30 18:59:43 67

原创 LeetCode 493 翻转对

给定一个数组nums,如果i < j且nums[i] > 2*nums[j]我们就将(i, j)称作一个重要翻转对。你需要返回给定数组中的重要翻转对的数量。首先给出二分搜索算法的解法:class Solution: def reversePairs(self, nums: List[int]) -> int: arr = [] res = 0 for val in nums[::-1]: ...

2020-11-28 15:10:55 60

原创 LeetCode 18 四数之和

给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。结果不可重复注意要去重from typing import *class Solution: def fourSum(self, nums: List[int], target: int) -> List[List[int]]: res ...

2020-11-27 09:11:10 80

原创 LeetCode 454 四数相加

给定四个包含整数的数组列表A , B , C , D ,计算有多少个元组 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过231 - 1 。本题如果暴力解决,那么时间复杂度为O(n^4)。如果将按个数组元素的和保存在哈希表中,那么时间复杂度为O(n^3)。我们将两个数组元素的和...

2020-11-27 08:58:37 102

原创 LeetCode 164 最大间距

给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。from typing import *class Solution: def maximumGap(self, nums: List[int]) -> int: if len(nums) < 2: return 0 max_val, min_val = max(nums), min(nums) if

2020-11-26 09:56:18 104

原创 LeetCode 951 翻转等价二叉树

我们可以为二叉树 T 定义一个翻转操作,如下所示:选择任意节点,然后交换它的左子树和右子树。只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转等价于二叉树 Y。编写一个判断两个二叉树是否是翻转等价的函数。这些树由根节点root1 和 root2给出。class Solution: def flipEquiv(self, root1: TreeNode, root2: TreeNode) -> bool: return self.jud..

2020-11-24 11:03:31 128

原创 LeetCode 222 完全二叉树的节点个数

给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~2h个节点。# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None ..

2020-11-24 10:54:38 77

原创 LeetCode 242 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。class Solution: def isAnagram(self, s: str, t: str) -> bool: arr1, arr2 = [0] * 26, [.

2020-11-22 09:16:15 134

原创 LeetCode 260 只出现一次的数字3

给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。示例 :输入: [1,2,1,3,2,5]输出: [3,5]lowbit操作在树状数组中也见过,保留最右边的1,剩余全部变为0。存在两个数不同,最终异或结果肯定不为0,from typing import *class Solution: def singleNumber(self, nums: List[int]) -> List[int]: ..

2020-11-18 14:27:57 55

原创 LeetCode 201 数字范围按位与

给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4示例 2:输入: [0,1]输出: 0本题关键在于找到两个数字的二进制公共前缀,然后后面的补0。class Solution: def rangeBitwiseAnd(self, m: int, n: int) -> int: shift = 0 .

2020-11-17 20:51:19 98

原创 LeetCode 1030 距离顺序排列矩阵单元格

给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为(r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序返回答案。)from typing import .

2020-11-17 08:57:43 54

原创 LeetCode 406 根据身高重建队列

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]由于是看前面有几个升高更高的,所以我们需要按照身高由高到低排序。然后再项结果队列中一个一个插入元素。

2020-11-16 19:47:38 83

原创 LeetCode 307 区域和检索

给定一个整数数组 nums,求出数组从索引i到j(i≤j) 范围内元素的总和,包含i,j两点。update(i, val) 函数可以通过将下标为i的数值更新为val,从而对数列进行修改。利用树状数组实现。from typing import *class NumArray: def __init__(self, nums: List[int]): self.n = len(nums) self.c = [0] * (...

2020-11-14 08:36:29 88

原创 LeetCode 22 括号生成

数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。利用卡特兰数的构造方法进行构造。from typing import *class Solution: """ 利用卡特兰数的构造方法进行构造 """ def __init__(self): self.dic1 = {0: [''], 1: ['()']} def generateParenthesi...

2020-11-13 11:58:45 48

原创 LeetCode 556 下一个更大元素

给定一个32位正整数n,你需要找到最小的32位整数,其与n中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。本题可以直接套用下一个更大排列。from typing import *class Solution: def nextGreaterElement(self, n: int) -> int: nums = [] n1 = n while n: nums.append...

2020-11-11 10:18:53 48

原创 2020-11-11

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1from typing import *class Solution: def nextPermutation(self, nums: List[i

2020-11-11 09:11:06 88

原创 LeetCode 122 买卖股票的最佳时机2

给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。道理很简单,如果当天股价高于前一天,那么就加上这两天的差值。from typing import *class Solution: def maxProfit(self, prices: List[int]) -> int: tem_p.

2020-11-08 10:10:31 93

原创 LeetCode 327 区间和的个数

给定一个整数数组nums,返回区间和在[lower, upper]之间的个数,包含lower和upper。区间和S(i, j)表示在nums中,位置从i到j的元素之和,包含i和j(i ≤ j)。肯定是想要得到一个NlogN的方法。这道题可以采用归并,线段树,树状数组等方法,这里给出二分搜索题解。from typing import *import bisectclass Solution: def countRangeSum(self, n...

2020-11-07 11:16:30 153

原创 LeetCode 1356 根据数组二进制下1的数目排序

利用位运算解决问题class Solution: def sortByBits(self, arr: List[int]) -> List[int]: dic1 = {} for val in arr: dic1[val] = self.num_one(val) arr.sort(key=lambda x: (dic1[x], x)) return arr def num_one(self,

2020-11-06 09:41:22 71

原创 LeetCode 57 插入区间

给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。本题可以有线性复杂度的算法,但是线性复杂度的算法需要考虑的情况很多,不如之间先排序后合并。from typing import *class Solution: def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[i

2020-11-04 08:51:35 112

原创 LeetCode LCP 04 覆盖

你有一块棋盘,棋盘上有一些格子已经坏掉了。你还有无穷块大小为1 * 2的多米诺骨牌,你想把这些骨牌不重叠地覆盖在完好的格子上,请找出你最多能在棋盘上放多少块骨牌?这些骨牌可以横着或者竖着放。输入:n, m代表棋盘的大小;broken是一个b * 2的二维数组,其中每个元素代表棋盘上每一个坏掉的格子的位置。输出:一个整数,代表最多能在棋盘上放的骨牌数。from typing import *class Solution: def __init__(self): .

2020-11-03 15:17:18 387

原创 LeetCode 797 所有可能的路径

给一个有n个结点的有向无环图,找到所有从0到n-1的路径并输出(不要求按顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a )空就是没有下一个结点了。from typing import *class Solution: def __init__(self): self.res = [] self.visited = None ...

2020-11-03 11:53:14 269

原创 LeetCode 1627 带阈值的图连通性

有 n 座城市,编号从 1 到 n 。编号为 x 和 y 的两座城市直接连通的前提是: x 和 y 的公因数中,至少有一个 严格大于 某个阈值 threshold 。更正式地说,如果存在整数 z ,且满足以下所有条件,则编号 x 和 y 的城市之间有一条道路:x % z == 0y % z == 0z > threshold给你两个整数 n 和 threshold ,以及一个待查询数组,请你判断每个查询 queries[i] = [ai, bi] 指向的城市 ai 和 bi 是否连通(即,它

2020-11-03 11:51:11 251

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除