- 博客(82)
- 资源 (22)
- 收藏
- 关注
原创 [算法知识]Gurobi建模求解相关参数设置
limits the total time expended (in seconds)求解时间限制。求解Gap限制,默认为10e-4。
2023-06-07 09:38:33
1375
原创 leetcode 面试题 17.06. 2出现的次数
链接:https://leetcode.cn/problems/number-of-2s-in-range-lcci。但是写出该方法需要找规律,在面试的时候可能推理整个规律的细节不是很现实。解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)该问题用的方法数数组dp,首先我通过总结规律写出了相关的code。以下是回溯的版本,但是回溯过于耗时了,我们还是要使用一些内存来减少迭代的次数。编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。
2023-04-01 22:05:58
555
1
原创 [算法复习笔记]算法相关知识记录(更新中)
待复习内容:数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、trie树算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
2023-03-17 22:44:02
157
原创 牛客 DP61 串(python)
长度不超过nn,且包含子序列“us”的、只由小写字母构成的字符串有多少个? 答案对10^9+7109 +7取模。所谓子序列,指一个字符串删除部分字符(也可以不删)得到的字符串。例如,“unoacscc"包含子序列"us”,但"scscucu"则不包含子序列"us"输入描述: 一个正整数n输出描述: 一个正整数,为满足条件的字符串数量对10^9+7取模的值此题只要能够写出状态转移方程就比较好写了如果没有及时取余的话会导致超时所以要在每次迭代的时候就及时做取余操作状态中有三个参数:f[
2022-05-12 21:39:26
811
原创 牛客 打家劫舍(三)(python)
你是一个经验丰富的小偷,经过上次在街边和湖边得手后你准备挑战一次自己,你发现了一个结构如二叉树的小区,小区内每个房间都存有一定现金,你观察到除了小区入口的房间以外每个房间都有且仅有一个父房间和至多两个子房间。问,给定一个二叉树结构的小区,如之前两次行动一样,你无法在不触动警报的情况下同时偷窃两个相邻的房间,在不触动警报的情况下最多的偷窃金额。1.如果输入的二叉树是52 1 2 2 10 1 1 2 3那么形状结构如下:小区入口的房间的值是2 ,偷窃第一层2和第三层 2,1 是最优方案。
2022-05-11 21:14:30
1069
原创 leetcode215 数组中的第K个最大元素(python)快速排序法
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4这题我用了快速排序的方法做的不过耗时还是有些长class Solution: def findKthLargest(self, nums: List[int], k: in
2022-04-20 09:58:48
933
原创 leetcode 630 课程表 III(python)
这里有 n 门不同的在线课程,按从 1 到 n 编号。给你一个数组 courses ,其中 courses[i] = [durationi, lastDayi] 表示第 i 门课将会 持续 上 durationi 天课,并且必须在不晚于 lastDayi 的时候完成。你的学期从第 1 天开始。且不能同时修读两门及两门以上的课程。返回你最多可以修读的课程数目。该问题实现起来不难主要是需要理清楚题目的思路需要一直动态地更新选择的课程更新的标准就是将耗时长的课程删去补上耗时短的课程class
2022-04-14 22:17:46
494
原创 leetcode 407 接雨水 II
给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。该问题与原二维问题的差距还是挺大的需要借鉴dijkstra算法的思想python中使用堆队列结构能够较好地实现这个问题从每次高度最小的点附近开始搜索判断其附近的点是否能接到雨滴class Solution: def trapRainWater(self, heightMap: List[List[int]]) -> int: if not hei
2022-04-13 16:46:53
139
原创 leetcode 42 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9暴力最值自己写的方法比较暴露使用两个数组记录点i左右的最大值leftmax和r
2022-04-13 15:27:15
119
原创 leetcode 239 滑动窗口最大值(python)
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: length = len(nums) if length < 2 or k < 2:return
2022-04-12 16:41:55
1169
原创 leecode 207&210 课程表
leecode 207 课程表你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false
2022-04-08 23:01:53
574
原创 leetcode 46&47 全排列
不含重复数字的全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]递归思路class Solution: def permute(self, nums: List[int]) -> List[List
2022-04-08 11:09:06
111
原创 leetcode 22 括号生成(python)
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]示例 2:输入:n = 1输出:[“()”]动态规划(深度优先算法)使用二叉树模型深度搜索可行的括号组合停止搜索的条件是括号个数=n或者右括号的个数多于左括号个数,即括号无效class Solution: def generateParenthesis(
2022-04-08 00:31:15
514
原创 leetcode 32 最长有效括号(python)
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = “(()”输出:2解释:最长有效括号子串是 “()”示例 2:输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”该问题有多种方法可以进行求解首先使用的是贪心算法计算左括号和右括号的关系如果右括号的个数大于左括号的个数,就不是有效的括号,需要重新归零计算该方法需要从左向右,再从右向左计算一次,才能历遍所有的可能性因为两个方向的历遍
2022-04-07 21:51:41
709
原创 牛客 地下迷宫(python)
小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫。为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了这个位置;1代表小青蛙可以达到的位置。小青蛙初始在(0,0)位置,地下迷宫的出口在(0,m-1)(保证这两个位置都是1,并且保证一定有起点到终点可达的路径)。小青蛙在迷宫中水平移动一个单位距离需要消耗1点体力值,向上爬一个单位距离需要消耗3个单位的体力值,向下移动不消耗体力值,当小青蛙的体力值等于0的时候还没
2022-04-06 23:49:21
285
原创 牛客BM85 验证IP地址(python)
编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255,用(“.”)分割。比如,172.16.254.1同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01是不合法的。IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (“:”)分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。
2022-04-06 11:57:24
213
原创 leetcode 846 一手顺子(python)
Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 groupSize ,并且由 groupSize 张连续的牌组成。给你一个整数数组 hand 其中 hand[i] 是写在第 i 张牌,和一个整数 groupSize 。如果她可能重新排列这些牌,返回 true ;否则,返回 false 。示例 1:输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3输出:true解释:Alice 手中的牌可以被重新排列为 [1,2,3],[2,3
2022-04-05 16:08:55
322
原创 leetcode 652 寻找重复的子树(python)
给定一棵二叉树 root,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。如果两棵树具有相同的结构和相同的结点值,则它们是重复的。示例1输入:root = [1,2,3,4,null,2,4,null,null,4] 输出:[[2,4],[4]]由于题目要求我们把所有的重复子树都找出来 那么重复子树的子树也应该在其中 所以我们应该从叶子节点开始找起因此使用后序查找方式是更为合适的为了标记唯一的树类型 对于None的子节点 我们需要用一个特殊符号“#
2022-04-05 15:16:51
964
原创 [算法笔试题]华为相关复习题(更新中)
算法笔试题 华为相关复习题leecode 698. 划分为k个相等的子集题目链接:划分为k个相等的子集使用概念:回溯+剪枝
2022-04-05 00:15:22
3701
原创 leetcode 79 单词搜索(python)
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],word = “ABCCED”输出:true使用深度优先+回溯方法
2022-04-05 00:13:01
172
原创 leetcode 347 前 K 个高频元素(python)
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]因为用的是python直接调用sort函数的话就会比较快如果不用sort的话需要写一个排序函数class Solution: def topKFrequent(self, nums: List[int],
2022-04-04 22:12:57
954
原创 leetcode 698 划分为k个相等的子集(python)
给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4个子集(5),(1,4),(2,3),(2,3)等于总和。示例 2:输入: nums = [1,2,3,4], k = 3输出: false该问题python不剪枝的话会超时主要使用了回溯+剪枝的思想疯狂试错每次把元素放到每一个篮子里面试试看
2022-04-04 21:31:13
473
原创 剑指 Offer 53 - I 在排序数组中查找数字 I(python)
统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2该问题不能简单地使用二分法因为我们返回的不是一个单一的位置应该找到一段连续的目标因此需要使用两次二分法寻找边界以下代码减少的代码的冗余使用两次有边界查找方法寻找区间class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]:
2022-03-30 01:08:54
905
原创 剑指 Offer 57 - II 和为s的连续正数序列(python)
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]自己用的是二分法class Solution: def findContinuousSequence(self, target: int) -> List[List[int]]: max_num = (target+1)//2
2022-03-26 01:17:20
945
原创 剑指 Offer 28 对称的二叉树(python)
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。这个是我自己完成的代码主要比较了以下几种情况左右子结点为None为对称左右子结点一个为None另一个不是None为不对称对比左子结点的左子节点和右子结点的右子节点(由于对称性)对比左子结点的右子节点和右子结点的左子节点(由于对称性)对比对称的点上的值是否相等# Definition for a binary tree node.# class TreeNode:# def __in
2022-03-22 21:16:41
810
原创 剑指 Offer 54 二叉搜索树的第k大节点(python)
给定一棵二叉搜索树,请找出其中第 k 大的节点的值。该题本身比较好理解但是具体的代码实现还是有一定的技巧的结合二叉搜索树的特点我们以右-根-左顺序来搜索最大值# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass So
2022-03-22 20:10:41
1037
转载 剑指 Offer 37 序列化二叉树(python)
请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。输入:root = [1,2,3,null,null,4,5]输出:[1,2,3,null,null
2022-03-22 15:47:12
131
原创 剑指 Offer 46 把数字翻译成字符串(python)
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258 输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”,“mcfi"和"mzi”使用动态规划思想即可该题思路和爬楼梯是一样的class Solution: def translateN
2022-03-20 15:27:28
584
原创 leetcode 题目33 搜索旋转排序数组(python)
整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数 ta
2022-03-07 11:31:06
162
原创 leecode 题目46 全排列(python)
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: 节点
2022-03-04 20:39:22
93
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人