自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jqq125的博客

Doing the right thing is the best defence!

  • 博客(25)
  • 收藏
  • 关注

原创 leetcode每日一题—395.至少由K个重复字符的最长字串

题目:给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。思路:该题用滑动窗口不太好做,主要是因为重复出现的字符不一定连续,这就使得 窗口什么时候滑动,什么时候扩展,不太容易判断。故换个思路,使用递归。若某字符c在字符串中出现的次数小于k,则该字符一定不会出现在结果子串中。故可以该字符c作为划分点,对字符串进行切割。然后再对分割后的子串进行递归判断。解答:class Solution: def longe

2021-02-27 11:25:58 734

原创 leetcode每日一题—1178.猜字谜

题目:外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么它就可以算作谜底:单词 word 中包含谜面 puzzle 的第一个字母。单词 word 中的每一个字母都可以在谜面 puzzle 中找到。例如,如果字谜的谜面是 “abcdefg”,那么可以作为谜底的单词有 “faced”, “cabbage”, 和 “baggage”;而 “beefed”(不含字母 “a”)以及 “based”(其中

2021-02-26 12:08:39 138

原创 leetcod-866.回文素数

题目:求出大于或等于 N 的最小回文素数。回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。例如,2,3,5,7,11 以及 13 是素数。回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。例如,12321 是回文数。思路:“偶数长度的回文数”中只有11是素数,其他的都可以被11整除。解答:class Solution: def primePalindrome(self, N: int) -> int: if N

2021-02-26 11:19:49 772

原创 leetcode—125.验证回文串 & 680.验证回文字符串II

题目125:验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。解答:class Solution: def isPalindrome(self, s: str) -> bool: if not s: return True s=s.lower() j=len(s)-1 i=0 while i&lt

2021-02-25 15:29:21 45

原创 leetcode—9.回文数

题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。解答:class Solution: def isPalindrome(self, x: int) -> bool: if x<0: return False tmp=x total=0 whil

2021-02-25 14:30:47 58

原创 最大公约数和最小公倍数

如何求最大公约数和最小公倍数?def gcd(x, y): """求最大公约数""" (x, y) = (y, x) if x > y else (x, y) for factor in range(x, 0, -1): if x % factor == 0 and y % factor == 0: return factordef lcm(x, y): """求最小公倍数""" return x * y // g

2021-02-25 14:23:57 83

原创 leetcode每日一题—867.转置矩阵

题目:给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。思路:zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。我们可以使用 list() 转换来输出列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。解答:class Solution: d

2021-02-25 09:03:36 256 1

原创 leetcode每日一题—1052.爱生气的书店老板

题目:今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。请你返回这一天营业下来,最多有多少客

2021-02-24 09:48:24 98

原创 leetcode—1720.解码异或后的数组

题目:未知 整数数组 arr 由 n 个非负整数组成。经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。思路:a^b=ca^c=b解答:class Sol

2021-02-17 10:18:57 43

原创 并查集

并查集是一种树型的数据结构,用于处理一些不交集的合并及查询问题。此数据结构的两个基本操作包括:1.Find:确定元素属于哪一个集合。def find(self, x): while x != self.parent[x]: x = self.parent[x] return x判断两个元素是否属于同一集合。def connected(self, p, q): return self.find(p) == self.find(q)2.Union:将两个集合

2021-02-15 17:01:16 47

原创 leetcode每日一题—765.情侣牵手

题目:N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。 一次交换可选择任意两人,让他们站起来交换座位。人和座位用 0 到 2N-1 的整数表示,情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2N-2, 2N-1)。这些情侣的初始座位 row[i] 是由最初始坐在第 i 个座位上的人决定的。思路:贪心异或:因为情侣编号只差1,所以除最低位外,其他位都一样。故可利用与1的异或运算来实现判

2021-02-14 12:19:05 112

原创 leetcode每日一题—567.字符串的排列

题目:给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。思路:滑动窗口求解用字典dic1 统计s1中的元素组成。用字典dic2统计 与s1等长的s2子串 的元素组成。当dic1==dic2,即可返回True。解答:class Solution: def checkInclusion(self, s1: str, s2: str) -> bool: if s1 in s2:

2021-02-10 14:39:42 124

原创 leetcode每日一题—76.最小覆盖子串

题目:给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。思路:滑动窗口解答:class Solution: def minWindow(self, s: str, t: str) -> str: if len(t)==1: if t in s: ret

2021-02-09 22:40:45 429

原创 leetcode每日一题—713.乘积小于k的子数组

题目:给定一个正整数数组 nums。找出该数组内乘积小于 k 的连续的子数组的个数。思路:滑动窗口,思想类似于leetcode 992解答:class Solution: def numSubarrayProductLessThanK(self, nums: List[int], k: int) -> int: n=len(nums) if k==1: return 0 left=0 right

2021-02-09 21:02:44 119

原创 leetcode每日一题—992.K个不同整数的子数组

题目:给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。)返回 A 中好子数组的数目。思路:atMostK(self,A,K):A中 至多有K个不同整数的子数组 的数目所求即为:atMosK(A, K)-atMostK(A,K-1)atMostK(A,K)的求解 利用了滑动窗口的思想。若A= [1,2,1,2],K=2,则 A中至多有K个不同

2021-02-09 12:19:22 114

原创 leetcode每日一题—978.最长湍流子数组

题目:当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。返回 A 的最大湍

2021-02-08 12:15:38 165

原创 好题—leetcode每日一题—665.非递减数列

题目:给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。思路:让改变 尽可能小地 减少对后续判断的影响。当不能满足非递减条件时,最多只能改变数组中的一个数。在遍历数组时,按如下要求操作:能改变nums[i-1],使数列nums[:i+1]满足条件,就改变nums[i-1]。实在不行再

2021-02-07 11:55:59 143

原创 DFS-leetcode 简直offer13.机器人的运动范围

题目:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?思路:DFS解答:class Solution: def movingCount

2021-02-05 16:03:53 90

原创 BFS-leetcode 773.滑动谜题

题目:在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示.一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换.最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开。给出一个谜板的初始状态,返回最少可以通过多少次移动解开谜板,如果不能解开谜板,则返回 -1 。思路:1.转换:将board转换为一个字符串列表2.neighbor:当0位于不同位置时,其可交换的邻居3.进行BFS遍历,直到字符串与目标字符

2021-02-05 12:43:10 121

原创 leetcode每日一题—1208.尽可能使字符串相等

题目:给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0。思路:滑动

2021-02-05 11:32:51 150

原创 leetcode每日一题—643.子数组最大平均数I

题目:给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。思路:滑动窗口解答:class Solution: def findMaxAverage(self, nums: List[int], k: int) -> float: #滑动窗口中各元素之和 cur_sum=sum(nums[:k]) res=cur_sum n=len(nums) for i in range(k,

2021-02-04 15:27:56 54

原创 【回溯】leetcode46.全排列

题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。思路:回溯解答:class Solution: def permute(self, nums: List[int]) -> List[List[int]]: res=[] def backtrack(nums, tmp): if not nums: res.append(tmp) return

2021-02-03 21:30:11 85 1

原创 【回溯】leetcode78/90.子集

题目:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。解答:class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: res = [[]] for i in nums: res = res + [[i] + num for num in res]

2021-02-03 21:10:25 174

原创 树—leetcode1022.从根到叶的二进制数之和

题目:给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。返回这些数字之和。题目数据保证答案是一个 32 位 整数。思路:先用一个数组res,记录所有路径的数字,最后再转换求和解答:# Definition for a binary tree

2021-02-02 15:37:54 105

原创 leetcode每日一题—424.替换后的最长重复字符

题目:给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 104。思路:滑动窗口解答:class Solution: def characterReplacement(self, s: str, k: int) -> int: if not s: return 0 #cmax保存滑动窗口内

2021-02-02 13:10:05 93

空空如也

空空如也

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

TA关注的人

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