自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【kickstart 2021 roundF】第一题 trash bins Python题解

from collections import defaultdictT=int(input())for tt in range(T): N=int(input()) ss=input() ans=0 ll=[-999999 for nn in range(N)] rr=[9999999 for nn in range(N)] if ss[0]=='1': ll[0]=0 for nn in range(1,N):

2021-09-23 22:09:41 221

原创 【kickstart 2021 round D】前三题python题解

第一题:题目:给定一个3*3数组,中心位置数字缺失,问可以任意整数填充该位置的情况下最多可有多少个等差数列(行、列、对角线)此处需注意下只能用整数填充from collections import defaultdictdef diff(x): interval=[] n=len(x) for i in range(1,n): interval.append(x[i]-x[i-1]) return intervalT=int(input())for

2021-08-16 23:34:22 230

原创 【kickstart 2021 round C】前三题python题解

第一题:题目:给定长度为N的字符串S,它是由字母表上的前K个字母构成,问字典序小于S且长度为N的回文字符串(由字母表上的前K个字母构成)有多少个?解释:参考官方题解,计算多少个长度为N/2的字符串的字典序小于S[::math.ceil(N/2)],这里计算的方法可采用将字符串转化为K进制数–>十进制数。【代码暂时只能过test set 1,正在查找错误】注:小于该字符串的字符串个数就是这个K进制数。import mathT=int(input())for tt in range(T):

2021-08-16 06:44:34 187

原创 【kickstart 2021roundB】前三题Python题解

第一题:题目:给定字符串,判断到每一个字符为止,共有多少个递增子串。T=int(input())for tt in range(T): N=int(input()) s=input() ans=[1] for i in range(1,N): if s[i]>s[i-1]: ans.append(ans[-1]+1) else: ans.append(1) print('Cas

2021-08-15 06:58:05 189

原创 【kickstart 2021 roundA】前三题Python题解

第一题题目:给定长度为N的字符串,若第i位和第N-i+1位不同,则score加1。问 给定score,需要对字符串做多少次替换(将某一位替换成任意一个大写字母)。t=int(input())for tt in range(t): N,K=[int(s) for s in input().split()] s=input() ans=0 if N%2==0: nn=N//2 else: nn=N//2+1 for ii in

2021-08-14 05:21:20 186

原创 【kickstart round G 2020】前两题python 解题思路

题目1:给定一个字符串,KICK出现在START前面算一个有效序列,问共有多少个有效序列,不同序列之间可重叠,只要两个序列的KICK或START位置不同则视为不同序列。注意不同序列之间有重叠,即KICKICKSTART是两个有效序列。T=int(input())for tt in range(T): ss=input() n=len(ss) if n<=8: ans=0 else: num_kick=0 ans=0

2020-10-19 02:27:00 155

原创 【kickstart round F 2020】前两题 python 题解

第一题:一些人排队取钱,每次可取金额有限,所需金额超过单次可取金额则需重新排队,问出队顺序暴力遍历test2 会TLE;按取金额次数排序,得到的即是出队顺序,复杂度就是O(nlogn),可过test2from collections import dequeimport mathT=int(input())for tt in range(T): N,X=[int(s) for s in input().split()] withdraw=[int(s) for s in inp

2020-09-28 03:20:29 147

原创 【leetcode 个人赛】秋叶收藏集 Python 解题思路

解题思路新建矩阵f[n][3]f[i][0] 为第i片叶子为’ryr’中的第一个r时,前面叶子一共需要的交换次数;f[i][1]为第i片叶子为’ryr’中的’y’时,前面叶子一共需要的交换次数;此时需考虑前面是y还是rf[i][2] 为第i片叶子为’ryr’中的第二个r时,前面叶子一共需要的交换次数;此时也需考虑前面是y还是r代码class Solution: def minimumOperations(self, leaves: str) -> int: n=le

2020-09-16 16:12:00 229

原创 【kickstart round B 2019】Building palindromes 第一题Python 题解

解题思路:直接暴力只能过test1如何能更快的判断回文字母呢?建立数组,在每个位置存储所有字母出现次数的前缀和代码:from collections import defaultdictT=int(input())for tt in range(T): N,Q=[int(s) for s in input().split(' ')] array=input() ans=0 pre_sum=[[0 for _ in range(26)]] for i in

2020-08-29 23:44:08 127

原创 【kickstart round A 2019】第一题Training Python题解

题目:教练从N个学生中挑选P个学生,并对之训练使P个同学技能值全部相同。解题思路:排序后,计算前缀和代码:T=int(input())for tt in range(T): N,P=[int(s) for s in input().split()] students=[int(s) for s in input().split()] students.sort() pre_sum=[0] for i in students: pre_su

2020-08-29 05:19:55 96

原创 【kickstart round E 2020】 Golden stone Python 解题思路只过小数据

用python照着Heltion的思路写依然只过了小数据,大数据TLE了。。。解题思路1 根据不同路口之间连接与否建图;2 dp数组表示每个路口拿到每种石头所需能量,开始初始化为无穷大,如该路口有某种石头,则其dp[i][j]=0;那与之有连接的路口取值为1;3 K数组表示每种合成方式用几种石头,sr数组表示每种合成方式用哪些石头,tg数组表示合成哪种石头;4 在每个路口更新获得不同石头所需能量,最小的dp[i][0]即为所求。代码from collections import dequef

2020-08-28 15:46:13 211

原创 【kickstart round E 2020】toys Python题解 只过了test 1

谨以此篇献给和我一样看的懂题解但下手写代码有点困难的同学~参考 HallStattMia 大神的代码,感觉大神的思路跟官方题解是一样的。(但改写成python后只能过小数据,大数据TLE了again),怒学C++解题思路(按官方题解里的变量定义)Ri 为记忆存续时间,Ei为玩的时间SUM为所有玩具Ei之和那当Ri+Ei>SUM时,表明该玩具在第二轮会造成中断;步骤:1 先把所有玩具按Ri+Ei之和排序,用heap降序存储;2 堆不为空时,判断Ri+Ei是否超出SUM,如果是则去掉该玩

2020-08-28 00:48:28 218

原创 【kickstart 2020 round E】前两题解题思路Python

还是只会做签到题。。题目1:Longest ArithmeticT=int(input())for tt in range(T): N=int(input()) array=[int(s) for s in input().split()] diff=[array[i]-array[i-1] for i in range(1,N)] if N==2: ans=2 else: ans=0 mark=9999

2020-08-26 00:07:53 148

原创 【kickstart 2020 round D】第3题Python 解题思路

继续总结round D 第3 4 题解题思路题目3 Beauty Tress题目4 Locked Doors

2020-07-18 07:58:10 218

原创 【kickstart2020 round D】前两题python解题思路

因为招行夏令营没有参加D轮,但事实是参加了依然是一题选手,无奈,在此总结前两题python解题思路。题目1 Record Breaker解题思路:前缀max代码:T=int(input())for tt in range(T): N=int(input()) num=[int(i) for i in input().split()] pre_max=[-1] # 此处注意不可以是0 for i in range(N): pre_max.append

2020-07-15 18:37:04 164

原创 【第195场周赛】前3题Python解题思路

mark一下,终于不是隔着时差半夜爬起来写周赛了,这次也是排名最好的一次,刚进300(不要嘲笑我)。题目1:5440. 数组异或操作class Solution: def xorOperation(self, n: int, start: int) -> int: nums=[0]*n for i in range(n): nums[i] = start + 2*i if n==1: retu

2020-06-21 16:19:31 237

原创 【leetcode 14. 最长公共前缀】Python解题思路

代码:class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if not strs: return "" elif len(strs)==1: return strs[0] else: min_len=9999 for i in strs:

2020-06-15 03:46:49 202

原创 【leetcode 5425. 切割后面积最大的蛋糕】Python 解题思路

题目链接:解题思路:找到横切和竖切的最大间隔,然后相乘代码:class Solution: def maxArea(self, h: int, w: int, horizontalCuts: List[int], verticalCuts: List[int]) -> int: horizontalCuts.sort() verticalCuts.sort() n_hori=len(horizontalCuts) n_ve

2020-05-31 18:43:26 311

原创 【leetcode 5418. 二叉树中的伪回文路径】Python 解题思路

题目链接:解题思路:在dfs二叉树的路径到叶子节点时,需要判断路径中不同节点中个数为奇数的数字是否不超过1个。(得着重体会一下 进入递归之前的操作 -> cnt[root.val]+=1和走出递归之后的操作 -> cnt[root.val]-=1),去看dong哥的算法小抄。# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None)

2020-05-24 22:54:55 167

原创 【leetcode 5419. 两个子序列的最大点积】Python 解题思路

题目链接:解题思路:设置dp数组,dp[i][j]应该是 dp[i-1][j]、dp[i][j-1]、dp[i-1][j-1]、nums1[i]*nums2[j]、dp[i-1][j-1]+nums1[i]*nums2[j]之间的最大值。代码:class Solution: def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int: m=len(nums1) n=len(nums

2020-05-24 22:15:49 224

原创 【leetcode 5417. 定长子串中元音的最大数目】 Python 解题思路

题目链接:解题思路:用一个数组存储前面所有字符中元音的个数class Solution: def maxVowels(self, s: str, k: int) -> int: yuanyin=['a','e','i','o','u'] n=len(s) max_val=0 if k==1: for i in range(n): if s[i] in yuanyin:

2020-05-24 16:32:05 194

原创 【kickstart 2018 round H】Mural Python 解题思路

题目链接:解题思路:找到和最大的长度为ceil(N/2)的连续子序列即可T=int(input())for tt in range(T): N=int(input()) wall=input() if N%2==0: n=int(N/2) else: n=int(N//2+1) max_val=0 stack=[] for i in wall: stack.append(int(i)) p

2020-05-24 04:47:39 156

原创 【kickstart 2018 round H】Big Buttons Python解题思路

题目链接:解题思路:对<禁止出现前缀>按字符串长度排序,首先判断是否有子串是其他子串的前缀,如有,在<禁止前缀>中只保留最短子串即可(即,如某禁止子串中的前缀也是禁止子串,则该子串可删去)。先求出N次操作共有2**N种可能,再把以<禁止前缀>开头的N次操作的组合减去即可。T=int(input())for tt in range(T): N,P=[int(s) for s in input().split()] sub_str=[] for

2020-05-24 03:12:57 126

原创 【kickstart 2018 round A】Scrambled Words Python 解题思路 test 2 TLE

题目链接:解题思路:test set 1好过。。其实我本来想着就是用一个长度为26的数组统计每个字符出现次数,在比较子串与给定词首末字符相等后,比较所有字符出现次数是否相等,但不知哪里没考虑全面总是WA,所以这里就用 子串和给定词sorted后是否相等来判断。T=int(input())for tt in range(T): L=int(input()) words=[s for s in input().split()] S1,S2,N,A,B,C,D=[s for s i

2020-05-24 00:17:07 135

原创 【kickstart 2018 round A】Lucky Dip Python 解题思路

题目链接:解题思路:K=0时,不可放回,E是包中所有物品价值平均数,记为E0K=1时,共可拿2次,可放回1次。这时需考虑,如果拿了1次又放回,则下一次拿的物品价值的期望是E0;如果拿了价值小于E0的物品还不放回,那此时期望小于E0,如果拿了价值大于E0的物品不放回,那此时期望大于E0,记为E1。K=2时,共可拿3次,可放回2次。可拿2次的期望我们前面已知。我们从之后开始考虑,如果第3次拿了又放回,则此时状态与可拿2次后相同,期望为E1;如果第3次拿了不放回,则分第3次拿的物品价值大于还是小于E1,若

2020-05-23 22:58:31 218

原创 【kickstart 2018 round A】 Even Digits Python 解题思路

题目链接:解题思路:给定一个数字(假设位数为n),向下查找小于该数且每一位都是偶数,应该是n个8;向上查找大于该数且每一位都是偶数。从头开始,找到第一个不是偶数的位,若该位是9,则应往下找。T=int(input())for tt in range(T): num=int(input()) num_str=str(num) n=len(num_str) min_ans=num if num==1: min_ans=1 else:

2020-05-23 20:20:56 325

原创 【leetcode 1013. 将数组分成和相等的三个部分】Python 解题思路

题目链接:给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + … + A[i] == A[i+1] + A[i+2] + … + A[j-1] == A[j] + A[j-1] + … + A[A.length - 1]) 就可以将数组三等分。解题思路:while 循环遍历当前和是否为 全数组和的1/3,和为0的情况特殊考虑。class Solution:

2020-05-22 22:09:21 307

原创 【leetcode 1010. 总持续时间可被 60 整除的歌曲】Python 解题思路

题目链接:在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量。形式上,我们希望索引的数字 i 和 j 满足 i < j 且有 (time[i] + time[j]) % 60 == 0。解题思路:如果两个for循环则会超时;用dict存储歌曲时长%60,然后一个while循环或者两个指针访问,注意余数为0或者30的情况特殊处理。class Solution: def numPairsDivisibleBy6

2020-05-22 21:07:53 188

原创 【leetcode 1305. 两棵二叉搜索树中的所有元素】Python 解题思路

题目链接:给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。方法1:先序遍历(或者其他方式)+sort 排序# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None

2020-05-20 23:54:44 159

原创 【leetcode 面试题 04.10. 检查子树】Python 解题思路

题目链接:检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。解题思路:递归判断 - > 两棵树是否相同,如不同,t1的子树与t2是否相同# Definition for a binary tree node.# class TreeNode:# def __i

2020-05-20 22:35:12 126

原创 【leetcode 582. 杀死进程】Python 解题思路

题目链接:我们用两个序列来表示这些进程,第一个序列包含所有进程的 PID ,第二个序列包含所有进程对应的 PPID。现在给定这两个序列和一个 PID 表示你要杀死的进程,函数返回一个 PID 序列,表示因为杀这个进程而导致的所有被杀掉的进程的编号。当一个进程被杀掉的时候,它所有的孩子进程和后代进程都要被杀掉。你可以以任意顺序排列返回的 PID 序列。解题思路:用dict建立PPID - > PID 映射关系,用stack表示kill的当前进程的所有子进程class Solution:

2020-05-20 21:43:04 862 2

原创 【leetcode 1120. 子树的最大平均值】Python解题思路

题目链接:给你一棵二叉树的根节点 root,找出这棵树的 每一棵 子树的 平均值 中的 最大 值。子树是树中的任意节点和它的所有后代构成的集合。树的平均值是树中节点值的总和除以节点数。解题思路:设置nonlocal变量,自底向上->dfs返回当前节点为根节点的子树的节点和 and 节点数目# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.va

2020-05-20 17:12:57 1625

原创 【leetcode 563. 二叉树的坡度】Python 解题思路

题目链接:给定一个二叉树,计算整个树的坡度。一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。整个树的坡度就是其所有节点的坡度之和。解题思路:dfs函数 返回当前节点及其子节点的和,设置nonlocal变量在遍历节点的过程中累加 slopeclass Solution: def findTilt(self, root: TreeNode) -> int: slope=0 def dfs(root):

2020-05-20 07:06:19 181

原创 【leetcode 549. 二叉树中最长的连续序列】Python 解题思路

题目链接:给定一个二叉树,你需要找出二叉树中最长的连续序列路径的长度。请注意,该路径可以是递增的或者是递减。例如,[1,2,3,4] 和 [4,3,2,1] 都被认为是合法的,而路径 [1,2,4,3] 则不合法。另一方面,路径可以是 子-父-子 顺序,并不一定是 父-子 顺序。解题思路:自底向上->判断当前节点是否能延续其子节点所能构成的递增序列和递减序列,注意:当前节点若不能延续其子节点所形成的递增或递减序列时,需将相应的inc/desc变量赋值为1!!!(卡在这里半小时,好伤)树的遍

2020-05-20 06:46:25 632

原创 【leetcode 1371. 每个元音包含偶数次的最长子字符串】Python解题思路

题目链接给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。参照官方题解写的python代码class Solution: def findTheLongestSubstring(self, s: str) -> int: location=[-1]*32 #保存各个状态最早出现位置 n=len(s) status=0

2020-05-20 04:17:45 402

原创 【leetcode 1022. 从根到叶的二进制数之和】Python 解题思路

给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。以 10^9 + 7 为模,返回这些数字之和。题目链接:开心,又实践了一下nonlocal的用法,对于二进制数的操作还是得锻炼熟悉,对于二叉树的递归操作还得加深理解,不然用的时候什么也想不起来.

2020-05-20 02:49:41 185

原创 【kickstart 2020 round C】第三题 Perfect Subarray Python 解题思路(test 2 TLE)

题目3:Perfect Subarray官方都提示了本题如果用慢的语言过不了test 2,那要不要学C++呢,可我觉得目前还是应该着重学习算法,我还不到追求程序效率的时候。。。看了前排大佬代码,改写成了Python,果不其然test 2 TLE了。。T=int(input())for tt in range(T): N=int(input()) array=[int(s) for s in input().split()] min_presum=0 dict1={}

2020-05-19 16:22:22 354

原创 【kickstart 2020 round C】前2题 Python 解题思路

题目1: Count down:计算数组中有多少个k, k-1, …, 1这样的连续序列。解题思路:先找到数组中所有的k,若一个k与下一个k的间隔不足k,则移除这个k,而后对其余所有k判断其后k-1的数是否依次递减至1T=int(input())for t in range(T): N,K=[int(s) for s in input().split()] ll=[int(s) for s in input().split()] listK=[] if K in ll

2020-05-19 06:25:48 356

原创 【leetcode 第26场双周赛】前3题 Python解题思路

题不难也只能三题的选手在此。。打算刷题过程中遇到hard连题解都看着费劲的时候就pass。。题目1 (5396. 连续字符):给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。示例1:输入:s = “leetcode” 输出:2解题思路:保存上一个遍历的字符及其连续长度class Solution: def maxPower(self, s: str) -> int: if len(s)==1:

2020-05-17 02:40:31 404

原创 【leetcode 面试题 08.10. 颜色填充】Python解题思路

颜色填充。编写函数,实现许多图片编辑软件都支持的“颜色填充”功能。给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和一个新的颜色值,将新颜色值填入这个点的周围区域,直到原来的颜色值全都改变。解题思路:从指定点出发dfs,改变值,记录访问状态class Solution: def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int) -> List[List[int]]: de.

2020-05-16 18:11:06 231

空空如也

空空如也

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

TA关注的人

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