- 博客(105)
- 收藏
- 关注
原创 蓝桥队最后一天
一反转字符串不懂要考什么,原地修改不就这样吗class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ for i in range(int(len(s)/2)): s[i],s[len(s)-1-i]=s[len(s)
2021-01-28 23:15:08
95
原创 蓝桥16
一删除链表中节点直接给代码吧,没学到什么,小小的一个知识点:跳过时,要继承一个节点和节点的值class Solution(object): def deleteNode(self, node): """ :type node: ListNode :rtype: void Do not return anything, modify node in-place instead. """ node.val = node.
2021-01-28 22:58:29
132
原创 蓝桥14
一数据中第K个最大元素快排每次迭代判断第一个数有多少数比它小它就是第几位,直接安插在固定位置每次迭代都能令一个数到达最终位置复杂度O(n)class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: # 快排 def quicksort(arr): # 参数不必加self if len(arr) < 2:
2021-01-26 23:07:06
115
原创 蓝桥12
一力扣题目160类比环形链表的思路(1)当A走到尾部的Null的时候,转到B链表的头节点继续走(2)当B走到尾部的Null的时候,转到B链表的头节点继续走值得注意的是,如图所示,无论是相交还是不相交,对于无环的链表来说,都一定会相遇,因此不会死循环。class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: if headA == No
2021-01-25 01:02:12
67
原创 蓝桥11
一LRU缓存机制创建两个量,记录最大容量,记录缓存信息获取值:如果存在,先将当前值pop出,然后再插入尾部,如果没有直接返回-1存值:如果已经存在,则直接取出,然后插入到尾部,如果不存在直接插入尾部存值时需要判定当前缓存是否超出最大限制,如果超出限制,则需要移除最前面的class LRUCache: def __init__(self, capacity: int): self.capacity = capacity self.caches = dic
2021-01-23 22:36:26
149
1
原创 蓝桥杯第11天:研究快慢指针性质
一136只出现一次的数字这个符合规定的解法比较唯一:位运算在程序中我们常常会用一个字段来记录多种简单的类型,例如,管理员管理帖子的时候,一个帖子有置顶,热议,精品等多个属性。这些属性又比较简单像置顶状态只有置顶和取消置顶两种状态;若是每一个字段都在数据库中加一个字段,若是状态比较多的话,就显的非常冗余;我们可以把这些属性通过位运算(一组特殊数值)存放在一个数据库的一个字段中。我们用这组数值来表示我们的一种状态(如1.置顶 2.取消置顶),之所以称之为一组特殊的数值,是因为这些存放状态的数值必须
2021-01-22 22:38:37
90
原创 蓝桥杯10天
一买卖股票的最佳时机我们要找到最大的差额就要记录从开始到现在获得最大的负收益min——然后将其减去这种方法只需要一次遍历,我们以局部和代整体和,整体最大和等于到目前为止的和减去目前为止的负收益和,倒退也成立,就可以找到局部max=整体和-局部负收益和这种方法在我那个最大子序和哪里讨论过,不懂的可以翻过去class Solution(object): def maxProfit(self, prices): """ :type prices: List[i
2021-01-22 00:02:17
182
原创 蓝桥杯第九天
一力扣88如果我们从正面比较然后更迭的话,就会产生nums1中有的数被更跌后就会被占用,因此消失为了解决这个问题,我们从后往前跌打,使用双指针记录比较的末尾值,然后进行迭代,从而在索引上更迭正确的值这个方式有一个疑问,就是有可能一方更迭玩,一般是nums2,所以我们在末尾还要补充连上另一个的列表的代码class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None
2021-01-20 01:16:31
104
原创 蓝桥杯第八天
一力扣63对于一个数学题,基本上就是Cm+n-1,n-1,但是没用学习的东西不过看了题解,这道题实际上靠的时动态规划(递归不知道算不算解法之一,大部分我的递归超时)我们要么右要么下,只有两种,所以对于dpij来说,他的思想就是dp【i】【j】=dp【i-1】【j】+dp【i】【j-1】,这是因为任意一个点的路线都来自与上方和左方因此,我们只需要设立初始值就可以进行动态规划了矩阵的初始就是边界都设定为1,意思是这里都只有1条路线class Solution: def uniquePa
2021-01-20 00:08:38
81
原创 蓝桥杯第七天
一力扣531思路使用zip函数,对矩阵进行解压再包装,实现旋转迭代中去掉第一项,然后解压,再zip这样就是旋转后了,但是我们旋转(列表元素)后还是从第一项开始,所以我们还要反转直到最后没有东西就停止迭代2代码class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: res=[] while matrix:
2021-01-18 23:40:12
168
1
原创 蓝桥杯第六天
1力扣题目431思路题目要求不允许使用int()函数,是为了让单纯再字符串条件下实现乘法,但是还是可以在单独字符中使用,其目的考验增加额外数由于相乘导致的进位我们可以倒着相乘,如果进位就记下,在下一次迭代时增加然后经过事件复杂度O(n2)的运算,可以成功迭代完毕最后加上为0的情况,在开头增添意外的字符串0代码class Solution: def multiply(self, num1: str, num2: str) -> str: if num1 ==
2021-01-16 23:59:07
391
1
原创 蓝桥第五天
一 力扣231思路不会,借鉴题解的调用堆,把列表中的每个节点都推入堆中直到全部推入后,调用堆,将数字从小到大读取,本来就以及有序了2代码class Solution(object): def mergeKLists(self, lists): import heapq head = point = ListNode(0) heap = [] for l in lists: while l:
2021-01-16 23:05:15
66
原创 蓝桥杯第四天 16 20 21
一 力扣题目161思路暴力算法没有任何作用,尝试过大部分暴力会超时我们尝试选取固定一个,然后使用双指针的方法要双指针的启发式算法,顺序必须有规律,所以我们先排序,使它有规律可循启发式算法是每次迭代产生的解可以帮助算法优化最佳解,在我们这道题中,求出的解如果大就让双指针向大的方向移动,反之亦然我们选取for 来进行第一个数字的遍历在循环中,我们选取左(l)右(r)指针来遍历,根据解集的和temp和target目标数的差可以让指针向左向有移动代码class Solution: d
2021-01-13 23:04:29
113
1
原创 蓝桥杯训练第三天
一力扣111思路首先我们要确认这是一个迭代最大值的过程,所以可以确定在迭代过程中更新的量,是长度l和两边遍历到的最小值选择两方指针缩进的遍历方式,一方取最左边,角标a,一方最右边角标b,中间量ans=max(ans,new_ans)就是不断寻找最大值过程,这也是启发式算法的一种既然从两边迭代,那么我们肯定以右边《左边或者左边》右边作为迭代结束的条件我们在根据左右两边的大小分情况讨论,来决定哪边的角标移动2代码class Solution: def maxArea(self, he
2021-01-12 19:05:26
84
原创 蓝桥杯训练第二天
一力扣7整数反转1思路可以反转的时候把他转化成字符串,记录正负号并变成整数,再反转,从第一个非0字符串开始切片,最后加上正负号用int强制转化复杂度On二代码class Solution(object): def reverse(self, x): """ :type x: int :rtype: int """ s=str(x) k=1 if s[0]=='-':
2021-01-12 16:14:48
153
原创 蓝桥杯第一天
这里写自定义目录标题一 力扣题库3:两数相加1思路2代码3结果二力扣题目21.思路2代码3结果三力扣7整数反转一思路二代码3结果四力扣题库41思路1暴力法2二分法2,代码3结果五力扣题库51思路2代码三结果欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富
2021-01-11 21:58:15
947
原创 课程表2
一 思路跟上一篇一样拓扑排序,可见我上一篇写法和思路二 代码class Solution: def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]: res = [] visited = [0] * numCourses adjacent = [[] for _ in range(numCourses)] def df
2020-05-18 22:03:14
116
1
原创 课程表1
一思路BPS方法,本质也可以理解成在图中找环,class Solution: def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: from collections import defaultdict graph = defaultdict(list) visited = set() for x, y in prerequi
2020-05-18 21:59:35
113
原创 106 返回二叉树
一 思路递归,每次递归返回左右两递归的更深的二 代码class Solution(object): def maxDepth(self, root): """ :type root: TreeNode :rtype: int """ if root is None: return ...
2020-05-05 20:45:18
173
原创 100.相同的树
一 思路最简单的迭代,判断存在不相同的情况,然后在相同情况下迭代,用and连接二 代码class Solution(object): def isSameTree(self, p, q): """ :type p: TreeNode :type q: TreeNode :rtype: bool """ ...
2020-04-24 22:21:35
81
原创 作业子集
一思路迭代一个原集合,它的集合元素加新元素构成新集合,在加上原集合的集合,就是新的集合集合二 代码class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: num=[[]] for i in nums: ...
2020-04-22 17:06:09
108
原创 无重复字母的最大子串
一 思路滑动窗口,遇到重复就记录新窗口,然后在老窗口和新窗口取最大长度但是为什么效率这么低啊O(n)啊才二代码class Solution: def lengthOfLongestSubstring(self, s: str) -> int: m=left=right=n=0 res=[] for i in s: ...
2020-04-08 16:08:20
90
原创 344反转链表
一 思路其实可以用双指针法,但是我发现reverse效率可以,80,内存也是100%不比用栈什么的了二 代码class Solution: def reverseString(self, s): s.reverse()...
2020-04-05 21:35:35
72
原创 239滑动窗口最大值
一思路一开始我想用个移动的列表记录,没想到效率太低二代码class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: res=[] s=[] for i in nums: res.append(i) ...
2020-03-28 19:22:09
78
原创 641,双端队列
一 思路下面的函数不能直接用k,需要在init里定义个量然后注意长度的问题就可以完成了二代码class MyCircularDeque: def __init__(self, k: int): """ Initialize your data structure here. Set the size of the deque to be k. ...
2020-03-27 23:26:30
88
原创 7.整数翻转
一 思路利用str的可翻转性质,在int和str的强制转化中翻转,记录正负和判断大小,都用if语句判断二 代码class Solution: def reverse(self, x: int) -> int: t=1 if x>0 else -1 strx=str(abs(x))[::-1] k=int(strx)*t ...
2020-03-26 16:12:48
69
原创 155,最小辅助栈
一 思路除了min,python的append和pop都能用,为了解决复杂度问题,我们使用辅助栈储存当前最小的数字二 代码class MinStack(object): def __init__(self): """ initialize your data structure here. """ self.stack=[] ...
2020-03-22 23:55:29
85
原创 有效的括号
一思路判断左边括号,然后用堆栈法从不能匹配左边括号的元素对应删除,最后判断是否全部匹配二代码class Solution(object): def isValid(self, s): """ :type s: str :rtype: bool """ c = ['(','[','{'] a...
2020-03-19 11:12:59
107
原创 删除链表中的重复元素
一 思路迭代函数,不断分割和判断,先判段存在,后迭代,再判断相等与否二 代码class Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ while not h...
2020-03-11 18:34:26
157
原创 合并两个有序链表
一 思路按老师上课讲的,先用其他链表记录两个链表共有部分,然后判断谁null,再接上另一个二 代码class Solution(object): def mergeTwoLists(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListN...
2020-03-11 17:53:10
88
原创 买入股票的最佳时机二
一 思路其实很简单也没什么说的,上涨就加,没想到还这么快二 代码class Solution(object): def maxProfit(self, prices): """ :type prices: List[int] :rtype: int """ total=0 ...
2020-03-05 11:18:01
160
原创 随机猜数——7
一 代码(没啥说的思路)import randomprint("………………………………马老师作业7……………………")k=random.randint(0,100)res=int(input("不妨猜一下小甲鱼现在心里是那个数字"))while res!=k: if res>k: print("你猜的数有点大") else: ...
2020-03-03 19:54:26
284
原创 121.买卖股票最佳时机
一 思路用一个记录当前遍历的最大值和来记录当前遍历的最小值不断取当前两记录的差的最大值即可二 代码class Solution(object): def maxProfit(self, prices): """ :type prices: List[int] :rtype: int """ whil...
2020-03-01 15:08:53
121
原创 88.合并两个数组
一 思路1 删除nums1多余数据2 nums1添加nums2数据nums1.sort()二 代码class Solution(object): def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] :type m: int :type n...
2020-02-26 19:59:50
121
原创 27,最大子序和
一。思路先检验数组存在与否用一个临时数据检验目前的数和差是否小于零,若小于则摒弃。大于则加入max的行列,使用数和差就检验,不使用就连加考虑数组全为负的情况在设置检验二。代码class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] ...
2020-02-26 18:37:17
86
原创 删除排序数组的重复项
一.思路等于把不同的数字按大小前移前移时,只筛选出和上个位置不一样的数进行赋值并列的两组数,nums通过有序比较=而让下一个取值最后num的项变化的数字+1就是长度二.代码class Solution(object): def removeDuplicates(self, nums): """ :type nums: List[int] ...
2020-02-19 21:26:22
77
原创 两数之和
一.思路看到和前面的数项,可以联想字典和哈希表,(好多函数虽然忘了)寻找字典的数值有没有在nums里找到后判断是否为本身元素用index等导出列表的数项二.代码class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :t...
2020-02-19 17:33:35
57
原创 knn
这幅图很多算法解释都在用:不同形状的点,为不同标签的点。其中绿色点为未知标签的数据点。现在要对绿色点进行预测。由图不难得出:如果k=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形。如果k=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形。1 k-邻近算法的流程...
2019-11-18 22:52:20
87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人