自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 本质上升序列

s="tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl"n=len(s)arr=[[s[i]] for i in range(n)]t=[set(s[i]

2021-06-05 01:03:12 256

原创 蓝桥杯 货物摆放

先求出来所有的质数,即质因数分解,然后根据质数求约数,对于质因子ai,有cnt个,那么他的选择方案有(cnt+1)种,所以采用dfs搜索。arr=[2,3,3,3,17,131,2857,5882353]s=set()def dfs(dep,result): if dep>=8: s.add(result) return dfs(dep+1,result) dfs(dep+1,result*arr[dep])dfs(0,1)s=lis

2021-06-04 23:13:51 341

原创 跑步训练

注意最后一天也是1号,千万不要漏写了,也不要不判断就写ans+=1,正确代码:import datetimestart=datetime.datetime(2000,1,1)end=datetime.datetime(2020,10,1)ans=0s=datetime.timedelta(days=1)while start!=end: if start.weekday()==0 or start.day==1: ans+=2 else: an.

2021-04-17 21:06:50 237

原创 七段码

ans=0def dfs2(index,mp,used): used[index]=1 for j in mp[index]: if used[j]==0: dfs2(j,mp,used)def f(arr): global ans mp=[[] for _ in range(6)] for i in range(7): if arr[i]==0: continue ..

2021-04-17 20:21:36 126

原创 全球变暖

“”"你有一张某海域NxN像素的照片,".“表示海洋、”#"表示陆地,如下所示:….##….##……##.…####.…###.…其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。例如上图中的海域未来会变成如下样子:……………#………请你计算:依照科学家的预测,照片中有多少岛

2021-04-17 17:36:46 92

原创 第几个幸运数

题目描述到x星球旅行的游客都被发给一个整数,作为游客编号。x星的国王有个怪癖,他只喜欢数字3,5和7。国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。前10个幸运数字是:3 5 7 9 15 21 25 27 35 45,因而第11个幸运数字是:49小明领到了一个幸运数字 59084709587505。去领奖的时候,人家要求他准确说出这是第几个幸运数字,否则领不到奖品。请你帮小明计算一下,59084709587505是第几个幸运数字。输出输出一个整数表示答案注意一定要

2021-04-17 16:37:52 125

原创 合根植物

1.13. 合根植物问题描述w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗?输入格式第一行,两个整数m,n,用空格分开,表示格子的行数、列数(1<m,n<1000)。接下来一行,一个整数k,表示下面还有k行数据(0<k<100000)接下来k

2021-04-17 16:07:44 168

原创 晚会节目单

1.12. 晚会节目单【问题描述】小明要组织一台晚会,总共准备了 n 个节目。然后晚会的时间有限,他只能最终选择其中的 m 个节目。这 n 个节目是按照小明设想的顺序给定的,顺序不能改变。小明发现,观众对于晚上的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。小明给每个节目定义了一个好看值,请你帮助小明选择出 m 个节目,满足他的要求。【输入格式】输入的第一行包含两个整数 n, m ,表示节目的数量和要选择的数量。

2021-04-17 15:32:52 97

原创 蓝桥杯迷宫

注意判断条件:if row<0 or col<0 or row>=10 or col>=10不是row0 or col0f=open("C:\\Users\\zzl261004\\Desktop\\22.txt","r")arr=f.readlines()mp=[]for s in arr: mp.append(list(s.strip()))ans=0def dfs(row,col): global ans if row<0

2021-04-17 12:42:18 86

原创 方格分割

蓝桥杯方格分割:注意需要回溯,mp[row][col]=0,mp[6-row][6-col]=0因为下一次还可能会用到该节点。mp=[[0]*7 for _ in range(7)]ans=0def dfs(row,col): global ans if mp[row][col]==1: return if row==0 or col==0 or row==6 or col==6: ans+=1 return m

2021-04-17 12:27:41 71

原创 腐烂的橘子

注意这里的,如果要当成队列来使用,这里que.pop(0),不是pop(-1)class Solution: def orangesRotting(self, grid: List[List[int]]) -> int: m=len(grid) n=len(grid[0]) que=[] x=[0,0,-1,1] y=[1,-1,0,0] level=0 for i in ra

2021-04-17 00:02:00 97

原创 完全平方数

注意dp[0]里面是0class Solution: def numSquares(self, n: int) -> int: dp=[n+2]*(n+1) dp[1]=1 dp[0]=0#注意这里是0 for i in range(2,n+1): j=1 while j*j<=i: dp[i]=min(dp[i],dp[i-j*j]+1).

2021-04-16 22:29:53 67

原创 整数拆分

因为3=2+1 2=2*1存在dp[i]与i的大小关系的不确定性所以需要先判断二者关系class Solution: def integerBreak(self, n: int) -> int: dp=[0]*(n+1) dp[1]=1 dp[2]=1 for i in range(3,n+1): for j in range(1,i): #因为3=2+1 2=2*1.

2021-04-16 21:33:59 60

原创 乘积最大子数组

维持一个乘积最大和最小的的dp数组,每次对nums[i]的正负进行判断。class Solution: def maxProduct(self, nums: List[int]) -> int: n=len(nums) dp=[0]*n dp2=[0]*n dp[0]=nums[0] dp2[0]=nums[0] ans=dp[0] for i in range(1,n):

2021-04-16 21:10:10 79

原创 最长有效括号

用栈模拟一遍,将所有无法匹配的括号的位置全部置1例如: "()(()"的mark为[0, 0, 1, 0, 0]再例如: ")()((())"的mark为[1, 0, 0, 1, 0, 0, 0, 0]经过这样的处理后, 此题就变成了寻找最长的连续的0的长度注意用栈模拟的时候,进入的一定是左括号的index,先只标记右括号的index,最后弹出所有没有匹配的左括号index,再进行markclass Solution: def longestValidParentheses(self,

2021-04-16 20:49:08 76

原创 排列序列

注意求全排列的时候used[i-1]=0,要记得还原。并且"".join(temp),temp必须是字符串的列表used=[0]*nans=[]ant=0flag=0answer=""def dfs(index): global ant,flag,answer if flag==1: return if index==n: ant+=1 if ant==k: flag=1 .

2021-04-16 16:57:47 74

原创 省份数量

dfs扫描不同节点,有的话就设置为visited,注意dfs里面是dfs(i)class Solution: def findCircleNum(self, isConnected: List[List[int]]) -> int: n=len(isConnected) used=[0 for _ in range(n)] ans=0 def dfs(index): used[index]=1 .

2021-04-16 14:52:23 72

原创 岛屿的最大面积

注意不要把ant写在参数里面即ant+1,应该把ant当成一个全局变量使用class Solution: def maxAreaOfIsland(self, grid: List[List[int]]) -> int: m,n=len(grid),len(grid[0]) ans=0 def dfs(row,col): nonlocal ant if row<0 or col<0 o.

2021-04-16 13:53:32 71

原创 组合总和

注意这里的for循环里面是dfs(i)。我们可以把解空间想象成一幅树,对于candidates=[2,3,6,7]target=7,可以想象第一行有2 3 6 7,第二行的第一个为2 3 6 7,第二个是 3 6 7,第三个是6 7,第四个为 7,依次进行下去,所以是dfs(i),class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: .

2021-04-16 13:25:14 61

原创 组合总和||

难点:注意list是可变元素,所以不能加入到set集合中,所以把list变成tuple加入到set中,dfs完了再把再把里面的元组变成list,然后把集合ans变成listclass Solution: def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]: candidates.sort() ans=set() n=len(candi.

2021-04-16 13:22:16 79

原创 相同的树

先进行节点的添加,然后进行节点的值的判断,注意初始根节点可能为None,并且最后的时候2个数组的长度还不一样,也需要判断。class Solution: def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: arr1=[] arr2=[] if p==None and q==None: return True elif p==None or q=.

2021-04-16 13:18:30 52

原创 子集

注意不要把num.append(nums[index])写在参数里面,因为他返回的是None。class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: n=len(nums) ans=[] def dfs(index,num:list): if index==n: ans.append(list(num)

2021-04-15 20:05:37 73

原创 岛屿数量

注意这里的dfs判断条件是row>=m,col>=n,grid[row][col]!=“1”,这里千万不要写错了class Solution: def numIslands(self, grid: List[List[str]]) -> int: m=len(grid) n=len(grid[0]) def dfs(row,col): if row<0 or col<0 or row>=.

2021-04-15 19:40:48 62

原创 对称二叉树

1.有了for循环就不需要另外添加nums层数列表了2.level[:]!=level[::-1]:#判断列表是不是回文列表DFS方法# 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 =.

2021-04-15 18:07:32 54

原创 二叉树的最大深度

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。BFS的方法来做,需要注意的是如果根为空需要直接返回0,这里把每个节点的val设置为它的层数。并不断跟ans比较。class Solution: def maxDepth(self, root: TreeNode) ->

2021-04-15 17:05:26 57

原创 括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"回溯剪枝条件:保证左括号>=右括号,并且不超过左括号和右括号都不超过nclass Solution: def generateParenthesis(self, n: int) -> List[str]:

2021-04-15 16:36:24 81

原创 电话号码的字母组合

采用dfs就行了,但是要注意字典最好用get方法获取值。class Solution: def letterCombinations(self, digits: str) -> List[str]: if digits=="": return [] dit = {'2': ['a', 'b', 'c'], '3': ['d', 'e', 'f'], '4': ['g', 'h.

2021-04-15 16:18:57 71

原创 python求全排列

方法1:visted=[0]*5n=len(visted)arr=[]ans=0def dfs(index): global ans if index==n: ans+=1 print(arr) return for i in range(n): if visted[i]!=0: continue visted[i]=1 arr.append(i+1)

2021-04-15 15:57:40 173

原创 三角形最小路径和

给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。示例 1:输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]输出:11解释:如下面简图所示:23 46 5 74 1 8 3自顶向下的最小路径和为 11(即,

2021-04-15 14:58:09 62

原创 不同的路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:向右 -&g

2021-04-15 14:45:48 55

原创 判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?致谢:特别感谢 @pbrother 添加此问题并且创建所有测试用例。示例 1:输入:s = “abc”, t

2021-04-15 12:57:57 61

原创 零钱兑换

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount = 0输出:0示例 4:输入:coins

2021-04-14 23:47:49 70

原创 最长递增子序列

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7,7,7,7]

2021-04-14 22:05:28 190

原创 迷宫

X星球的一处迷宫游乐场建在某个小山坡上。它是由10x10相互连通的小房间组成的。房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R表示走到右边的房间,U表示走到上坡方向的房间,D表示走到下坡方向的房间。X星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!开始的时候,直升机把100名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。迷宫地图如下:UDDLUULRULUURLLLRRRURRUURLDLRD

2021-04-10 22:29:25 75

原创 合法括号的组成

【问题描述】由1对括号,可以组成一种合法括号序列:()。由2对括号,可以组成两种合法括号序列:()()、(())。由4对括号组成的合法括号序列一共有多少种?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。n=int(input())n=nans=0def dfs(L,R): global ans if L<R or L>n or R>n: return

2021-04-10 19:43:40 206

原创 买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1

2021-04-10 18:52:38 58

原创 最长回文子串

注意这里第二个循环就可以写成while了,不必写成for循环了给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”class Solution: def longestPalindrome(self, s: str) -> str:

2021-04-10 17:06:47 49

原创 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是

2021-04-10 16:39:45 63

原创 最大子阵

题目1.如果单纯枚举首行,末行,首列,末列来做这道题,就是四重循环,数据最大时,每重循环大概500次,500^4时间复杂度可以达到十的十次方,肯定会超时。所以要考虑能否降循环,或者找到贪心,dp规律。2.我们思考一下,可以发现。我们可以开一个数组sum,用来记录某个格子头上全部的格子+它本身的和。举个例子,样例的数据是-1 -4 33 4 -1-5 -2 8那么sum数组就是-1 -4 32 0 2-3 -2 10/sum数组的建立看代码13~24行/3.建立起sum数组之后,sum的

2021-04-06 22:00:37 64

原创 最大子段和

#include<iostream>using namespace std;int MaxSum(int n, int a[], int &l, int &r){ int sum=0, b=0, i=0, bestI=0, bestJ=0; for(int j = 1; j <= n; j++) { if(b > 0) { b += a[j]; }

2021-04-06 17:18:48 66

空空如也

空空如也

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

TA关注的人

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