自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 双目图像三维重建 转点云以及可视化

看看啥时候把这个总结整理一下

2022-06-21 11:03:20 1021 7

原创 [Leetcode] 每日两题 313 417 -day116

313. 超级丑数这个题一开始想到用 优先队列来做,但是超时了, 原因是维护优先队列需要花费时间其实其核心思想很难描述 ,用人话讲就是:对于质因数列表中的每个元素,需要维护一个值来记录,上次用这个元素构建的最大值是多少,然后下次,只要比较,所有质因数列表重新又根据上一轮的最大值来构建的新的值的最小值,而如果维护dp 就可以不记录值,记录dp的位置就行class Solution {public: int nthSuperUglyNumber(int n, vector<int&

2022-03-24 22:03:21 315

原创 [Leetcode] 每日两题 139 97 -day115字符串DP

今天练两个字符串DP ,字符串DP的难点在于 干扰项比较多,到底怎么定义DP方程这个需要想一想。139. 单词拆分这个题就必须从原字符串入手,而不能从单词表入手,从0开始扫描到末尾,dp[i]表示字符串s的前i个字符能否由wordDict中的单词组成。而这个判定 由 若 i-j 这个字串在列表内且dp[j]=true,那么 dp[i]=trueclass Solution {public: bool wordBreak(string s, vector<string>&a

2022-03-23 22:01:40 316

原创 [Leetcode] 每日两题 2039 221 -day114

2039. 网络空闲的时刻BFS先构建邻接表 然后统计0号节点到每个和节点的最短距离然后维护每个节点发送信息的最大时间,这时可分为两种情况 对于节点vvv当2×dist≤patience[v]2 \times \textit{dist} \le \textit{patience}[v]2×dist≤patience[v]时,则此时节点 vvv还未开始发送第二次消息就已收到回复,因此节点 vvv 只会发送一次消息,则此时节点 vvv 变为空闲的时间为 2×dist+12 \times \text

2022-03-21 00:10:03 334

原创 每日两题 -day113

今天 的每日两题就总结下午打的一个比赛的两个题Shopee Xpress Delivery迷宫寻找最短路问题, 而且在地图添加了无消耗转移点使用BFS解决, 首先构建 转移点列表, 从 0,0 点开始 ,可移动方向是上,下,左,右 和同类型的转移点的位置,对于可移动的点,判断是否被访问过,将其添加到队列中,若 终点被添加 那么返回路径值import collectionsm,n = [int(num) for num in input().strip().split()]gird =

2022-03-19 18:59:35 171

原创 [Leetcode] 每日两题 1125 743 -day112

这段时间重温一下C++编程1125. 最小的必要团队状态压缩DP状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的状态必须只有两种,0 或 1class Solution {public: vector<int> smallestSufficientTeam(vector<string>& req_skills, vector<vector<stri

2022-03-18 22:41:10 739

原创 [Leetcode] 每日两题 130 -day111 bfs dfs

这段时间重温一下C++编程130. 被围绕的区域新瓶装老酒 和之前的岛屿问题类似,DFS BFS都可以做,先扫边缘一圈DFSclass Solution {public: int n,m; int dis[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void dfs(vector<vector<char>>& board,int i,int j){ board[i][j] ='Y';

2022-03-17 23:08:23 604

原创 [Leetcode] 每日两题 279 57 -day110

这段时间重温一下C++编程279. 完全平方数动态规划 dp[i] = dp[i-j^2] +1class Solution {public: int numSquares(int n) { vector<int> dp(n+1,0); for(int i=1;i<=n;i++){ int tmp =9999; for (int j = 1;j*j<=i;j++)

2022-03-16 23:24:07 767

原创 [Leetcode] 每日两题 124 210 -day109

这段时间重温一下C++编程124. 二叉树中的最大路径和深度优先搜索维护一个全局最优值,对于每个节点其可能最大值 在(节点值 ,以及左右子节点是否选择)中但是题目要求的是路径 而不是子树 (需要注意)所以对于 某个父节点 选择该子节点的 最优值时 需要排除 其子节点左右都连接的情况,所以递归的返回和最大值的维护稍有不同class Solution: def maxPathSum(self, root: Optional[TreeNode]) -> int:

2022-03-15 21:53:15 997

原创 [Leetcode] 每日两题 36 129 -day108

这段时间重温一下C++编程36. 有效的数独哈希,通过统计行、列、格子 中1-9的个数,若超过一个就返回Falserow(i,j) i表示第几行 j表示1-9 是否已经存在class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: row = [[0]*9 for _ in range(9)] col = [[0]*9 for _ in ran

2022-03-14 21:44:33 1001

原创 牛客网输入输出练习-python3

牛客网输入输出练习-python3大家平时刷题大多都是在leetcode 上刷,leetcode 帮你写好输入输出,你只要写一个算法函数就行。但是往往面试笔试的时候在牛客网上是需要自己写输入输出的。所以从leetcode 编程习惯转向牛客网的话就需要练习一下常见的输入输出。首先输入 使用只需要一行万能代码就行了:nums = [int(num) for num in input().strip().split()] #数字列表的输入string = [s for s in input().stri

2022-03-12 12:02:19 1454

原创 [Leetcode] 每日两题 337 LCP 34 -day107 树状DP

树状DP树状 DP,即在树上进行的 DP。由于树固有的递归性质,树状DP 一般都是递归进行的。树状DP往往结合DFS ,树的后序遍历,从叶子节点开始考虑337. 打家劫舍 III对于这个题 对于每个父节点,若选择该节点,那么其子节点不可选;若不选择该节点,就可以选择其子节点维护的最大值之和。 下面chose变量并不是一定选择该节点 ,只是表示在 选择该节点和不选中 取更优的。所以每次递归返回两个值,代表当前节点最优和不选的情况。class Solution: def rob(self

2022-03-10 22:57:27 373

原创 [Leetcode] 每日两题 meituan002 005 -day106

本来想通过一些笔试真题练一下输入输出 ,然后被深深的伤害了meituan-002. 小美的仓库整理美团的题 写了 个 n^2 超时 简直又臭又长import heapqn = int(input())wit = [int(w) for w in input().strip().split() ]num = [int(n) for n in input().strip().split() ]lis = [0,]for i in range(n): lis.append(w

2022-03-09 22:09:33 402

原创 [Leetcode] 每日两题 773 207 -day105 BFS(2)

BFS专题(2)今天面试正好碰见了一个BFS的题 然后在leetcode 找到了类似的题如下773. 滑动谜题为了寻找最少交换次数 ,所以需要暴力搜索来找到答案, 使用BFS对于当前的lis 找到当前 0 的位置, 将其加入队列每当从队列中弹出元素,判断其是否和目标相同,若相同则返回 次数否则判断其可以交换的位置,得到新的lis 以及新的 0 的位置,判断该新lis是否在之前出现过,若没出现过,将其加入队列中,并且移动次数+1若队列为空都没找到答案 那么返回-1class Solution

2022-03-08 21:56:59 195

原创 [Leetcode] 每日两题 111 815 -day104 BFS(1)

BFS专题111. 二叉树的最小深度BFS从根节点 BFS搜索 其他节点 加入队列,然后依次出队,判断子节点是否存在 不存在则说明搜索到叶子节点,然后返回其深度。class Solution: def minDepth(self, root: TreeNode) -> int: if not root: return 0 que = [[root,1]] while que: node ,

2022-03-07 21:18:47 6228

原创 [Leetcode] 每日两题 1020 1905 -day103 DFS解决岛屿问题(2)

DFS解决岛屿问题1020. 飞地的数量加条件的 岛屿统计问题 和之前一样 先腐蚀一边边缘 把陆地都腐蚀了 再统计陆地class Solution: def numEnclaves(self, grid: List[List[int]]) -> int: m , n = len(grid),len(grid[0]) res= 0 def dfs(x,y): grid[x][y]=0

2022-03-06 16:11:37 141

原创 [Leetcode] 每日两题 200 1254 -day102 DFS解决岛屿问题(1)

DFS解决岛屿问题200. 岛屿数量class Solution: def numIslands(self, grid: List[List[str]]) -> int: m,n=len(grid),len(grid[0]) #vis = [[0]*n for _ in range(m)] def dfs(i,j): grid[i][j] = '0' for x,y in [[i+1,j]

2022-03-05 23:38:47 201

原创 [[Leetcode] 每日两题 90 39-day101 重温回溯算法(4)

重温回溯算法(4)继 [Leetcode] 每日两题 46 112 -day98重温回溯算法(1)继 [Leetcode] 每日两题 51 100 -day99 重温回溯算法(2)继 [Leetcode] 每日两题 698 78 -day100 重温回溯算法(3)90. 子集 II这个题相比昨天的 子集 多了一个重复元素,那么所以需要进行剪枝,首先将元素排序,这样重复元素就放到了一起,在循环递归之前,判断对于当前的list 该元素是否已经参与递归,也就是该元素是否与上一个元素相同 这样就OK了

2022-03-04 23:19:44 190

原创 [Leetcode] 每日两题 698 78 -day100 重温回溯算法(3)

重温回溯算法(2)继 [Leetcode] 每日两题 46 112 -day98重温回溯算法(1)继 [Leetcode] 每日两题 51 100 -day99 重温回溯算法(2)698. 划分为k个相等的子集这个题就是一个暴力遍历,直到找到满足放置条件的一种放法,然后要加快速度的话需要剪枝,这里我就稍微剪了一下,写的有点乱。之后等脑子清晰点的时候再优化一下。(也就是不优化了)class Solution: def canPartitionKSubsets(self, nums: Lis

2022-03-03 20:43:38 234

原创 RL 笔记(3)PPO(Proximal Policy Optimization)近端策略优化

RL 笔记(3) PPO基本原理PPO是在基本的Policy Gradient基础上提出的改进型算法Policy Gradient方法存在核心问题在于数据的bias。因为Advantage估计是不完全准确的,存在bias,那么如果Policy一次更新太远,那么下一次采样将完全偏离,导致Policy更新到完全偏离的位置,从而形成恶性循环。因此,TRPO的核心思想就是让每一次的Policy更新在一个Trust Region里,保证policy的单调提升。Policy gradient方法是on poli

2022-03-03 15:52:58 2760

原创 RL 笔记(2) 从Pollicy Gradient、DDPG到 A3C

RL 笔记(2) 从Pollicy Gradient、DDPG到 A3CPollicy GradientPolicy Gradient不通过误差反向传播,它通过观测信息选出一个行为直接进行反向传播。 通过更新 Policy Network 来直接更新策略的。实际上就是一个神经网络,输入是状态,输出直接就是动作(不是Q值)。而是利用reward奖励直接对选择行为的可能性进行增强和减弱,好的行为会被增加下一次被选中的概率,不好的行为会被减弱下次被选中的概率。一般输出有两种方式:一种是概率的方式,即输出某一个

2022-03-02 22:12:19 932

原创 [Leetcode] 每日两题 51 100 -day99 重温回溯算法(2)

重温回溯算法(2)续 [Leetcode] 每日两题 46 112 -day98重温回溯算法(1)回溯算法的思路就是把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。本质上还是暴力枚举。使用的思想和DFS类似。详细描述 :回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐层向

2022-03-02 20:53:54 205

原创 [Leetcode] 每日两题 46 112 -day98重温回溯算法(1)

重温回溯算法(1)回溯算法的思路就是把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。本质上还是暴力枚举。使用的思想和DFS类似。详细描述 :回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。回溯法的基本行为是搜索

2022-03-01 20:59:54 307

原创 RL笔记 DQN 系列

RL 笔记 DQN 系列DQN使用一个Q Network来估计Q值,从而替换了 Q-table,完成从离散状态空间到连续状态空间的跨越。Q Network 会对每一个离散动作的Q值进行估计,执行的时候选择Q值最高的动作(greedy 策略)。并使用 epslion-greedy 策略进行探索(探索的时候,有很小的概率随机执行动作),来获得各种动作的训练数据。double DQN针对DQN中 由于函数近似误差导致得Q 值高估和次优策略。按理来说,一个状态的估值应该是这个状态下所有动作估值的数学期望

2022-03-01 16:06:16 306

原创 RL 笔记 从 Q-learning 、Sarsa 到 DQN

RL 笔记 从 Q-learning 、Sarsa 到 DQNQ-LearningQ-Learning 是一个强化学习中一个很经典的算法,就是用一张表存储在各个状态下执行各种动作能够带来的 reward,如下表表示了有两个状态 s1,s2 每个状态下有两个动作 a1,a2 表格里面的值表示在对应状态下采取动作之后的 reward-a1a2s1-12s2-52这个表示实际上就叫做 Q-Table,里面的每个值定义为 Q(s,a) 表示在状态 s下执行动作 a

2022-03-01 15:54:43 868

原创 [Leetcode] 每日两题 1514 1368 -day97 dijkstra算法专题(2)

重温 dijkstra算法(2)继上一篇https://blog.csdn.net/weixin_43146899/article/details/123166708?spm=1001.2014.3001.55011514. 概率最大的路径​目标是求 start 到end 的最大概率路径的概率值, 求最大,同样使用优先队列,加入队列之前权重取一个负值,首先构建节点的邻接表,方便拓展节点时对其邻居快速访问队列一开始就 起点以及在队列中,每次对于出队 的节点访问其邻居 并且比较之前到其邻居的概率

2022-02-28 21:25:07 173

原创 [Leetcode] 每日两题 743 1631 -day96 dijkstra算法专题

重温 dijkstra算法Dijkstra算法 (迪杰斯特拉算法 ,卜老师纠正过是叫戴斯特比较标准)是典型最短路径算法,用于计算一个节点到其他节点的最短路径。类似于广度优先搜索,它的主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。基本步骤 :指定起点s;定义一个数组dis表示s到每个点的距离,集合Q记录当前求出的最短路径点(距离起点)以及距离,一开始Q中只有s一个点且距离为0,而visited数组用于标记节点是否已经求出距离起点的最短距离;找出Q的 当前求出的路径的最小值对

2022-02-27 17:35:14 1792

原创 安装显卡驱动后 重新安装pytorch 后torch.cuda.is_available() 返回false 无法调用cuda

更换显卡之后,安装驱动 参考然后重新使用conda 安装 pytorch 之后import torchprint(torch.cuda.is_available())返回false再尝试重新安装显卡驱动、安装CUDA 、更换各种版本的pytorch无果后卸载pytorchconda uninstall pytorch使用 pip 安装pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f

2022-02-23 11:41:01 996 2

原创 [Leetcode] 每日两题 13 860 -day95

剑指 Offer 13. 机器人的运动范围BFS首先将起点加入队列 ,其次四个方向依次判断 若改位置在棋盘 且之前没被访问,且满足k的条件 那么将其加入队列最后入队的格子数目class Solution: def movingCount(self, m: int, n: int, k: int) -> int: lis =[(0,0)] res = 1 mov = [(1,0),(0,1),(-1,0),(0,-1)]

2022-02-22 19:26:55 108

原创 [Leetcode] 每日两题 838 1529 -day94

838. 推多米诺可以通过模拟来做,每次遍历 替换某些点,直到一次遍历之后没有元素被替换但是通过双指针来做更快'R......R' => 'RRRRRRRR''R......L' => 'RRRRLLLL' or 'RRRR.LLLL''L......R' => 'L......R''L......L' => 'LLLLLLLL'class Solution: def pushDominoes(self, dominoes: str) -> str:

2022-02-21 20:57:22 141

原创 [Leetcode] 每日两题 967 717 -day93

967. 连续差相同的数字收先列表中存放 1-9为首位 ,对于下一位 判断当前列表的元素末尾与K相加减是否满足0-9 然后为列表添加新元素class Solution: def numsSameConsecDiff(self, n: int, k: int) -> List[int]: res =[1,2,3,4,5,6,7,8,9] for i in range(n-1): tmp = []

2022-02-20 22:00:57 6213

原创 [Leetcode] 每日两题 1019 1791 -day92

1019. 链表中的下一个更大节点单调栈正常应该是从后向前访问链表 所以这里可以选择反转链表或者将链表转换为数组然后按照索引访问构建索引的单调栈遍历整个链表 ,若栈为空或者栈顶索引对应的值大于当前结点值(递减栈) 则入栈否则对栈顶索引位置进行赋值(当前节点值)class Solution: def nextLargerNodes(self, head: Optional[ListNode]) -> List[int]: lis = []

2022-02-18 23:54:55 104

原创 [Leetcode] 每日两题 688 1832 -day91

688. 骑士在棋盘上的概率二维DP 对于棋盘的每个格子的每一步得分 由其 “日”字领域上一步的得分构成,所以 对于K步,从第一步开始一步一步推出每一个格子的得分,若其邻域超出棋盘则视为0分。所有格子更新完成之后,统一更新一下整个棋盘格。class Solution: def knightProbability(self, n: int, k: int, row: int, column: int) -> float: nex = [[1,2],[2,1],[1,-2]

2022-02-17 23:03:05 184

原创 [Leetcode] 每日两题 1001 470 -day90

1001. 网格照明哈希表对于每个灯的位置使用记录一下,同时记录该灯所在的行、列、对角、反对角 的值都+1,应对重复照亮对于每个查找,查找其行,列、对角、反对角是否大于0 来判断是否点亮同时对该查找的领域进行 是否有灯判定,然后 减去相应的 行、列、对角、反对角值class Solution: def gridIllumination(self, n: int, lamps: List[List[int]], queries: List[List[int]]) -> List[int

2022-02-08 23:59:36 61

原创 [Leetcode] 每日两题 1405 1773 -day89

1405. 最长快乐字符串一开始觉得用大顶堆实现不错,但是后来一想入队出队太麻烦就直接根据贪心 然后按字母排序来做,若有两个连续字母了就到下一个字母,否则一直添加最多的那个字母 ,然后每次排序一次就行也可以使用判断来做,因为只有三个字母class Solution: def longestDiverseString(self, a: int, b: int, c: int) -> str: res = '' lis = [[a,'a'],[b,'b']

2022-02-07 21:38:51 6545

原创 [Leetcode] 每日两题 137 1342 -day88

137. 只出现一次的数字 II参考https://leetcode-cn.com/problems/single-number-ii/solution/single-number-ii-mo-ni-san-jin-zhi-fa-by-jin407891/电路逻辑原理三次归零class Solution: def singleNumber(self, nums: List[int]) -> int: one, two = 0, 0 for num in

2022-01-31 23:13:29 2446 1

原创 [Leetcode] 每日两题 117 884 -day87

117. 填充每个节点的下一个右侧节点指针 IIBFS 层序遍历 然后每一层都用其next将该层串起来class Solution: def connect(self, root: 'Node') -> 'Node': if not root: return root node = root que = deque() que.append(node) num = 1

2022-01-30 21:26:46 543

原创 [Leetcode] 每日两题 1765 387 -day86

1765. 地图中的最高点多端BFS如果本题从地图入手 会发现复杂度很高但是如果从特殊地形 水域 入手 就会发现问题 和之前的BFS类似将水域地形加入队列, 出队时,根据贪心,对其领域未被访问的地形进行地形增加,最终返回该地图class Solution: def highestPeak(self, isWater: List[List[int]]) -> List[List[int]]: m,n = len(isWater),len(isWater[0])

2022-01-29 23:41:07 2450

原创 [Leetcode] 每日两题 1996 916 -day85

1996. 游戏中弱角色的数量由于是比较两个值是否都大于,所以可以按照攻击值降序排序,对于排序后遍历的每个元素的攻击值都是存在存在比他大的,所以只需维护一个防御值的当前最大就行,若当前元素的防御值小于当前最大,那么弱角色+1class Solution: def numberOfWeakCharacters(self, properties: List[List[int]]) -> int: res = 0 properties = sorted(pro

2022-01-28 22:48:18 2507

原创 [Leetcode] 每日两题 2058 2108 -day84

2058. 找出临界点之间的最小和最大距离遍历整个链表 然后判断 每个节点是否为临界点 ,之后将位置放入列表中,同时记录最近距离,最后返回列表首尾差值即为最大距离class Solution: def nodesBetweenCriticalPoints(self, head: Optional[ListNode]) -> List[int]: res1,res2 =-1,-1 dislist = [] node = head

2022-01-27 23:39:51 309

空空如也

空空如也

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

TA关注的人

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