![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
牛客+力扣+赛码(python)
文章平均质量分 73
刷题小能手,开始刷刷刷。
奈何碎银没有几两
这个作者很懒,什么都没留下…
展开
-
字节跳动---面试算法刷题(1~10)(python)
一:最长回文子串(动态规划):思路:循环遍历这个字符串,会出现两种情况,一种是最长回文串是奇数的时候,另外一种是回文串是偶数的时候,基于两种情况,我们使用双指针更新最大值就可以了。class Solution: def getLongestPalindrome(self, A, n): # 1:特殊:如果是个空子串则直接返回0 if n == 0: return 0 # 2: 假设是最长回文串是奇数,则 res = 1 # 最长的原创 2021-03-22 16:35:57 · 997 阅读 · 1 评论 -
力扣----经典题(python实现)
经典题一:两数之和:二:三数之和:三:两数相加:四: 买股票的最佳时机:一:两数之和:二:三数之和:1:首先我们要对数组进行排序, 排序的原因是因为不允许出现重复的。2:第一层循环,我们可以循环遍历数组,枚举a,而且我们要判断当前枚举的和上次枚举的是否值是相同的,如果相同的,则直接跳过。3:第二层中,我们可以计算出,剩余两个相加需要的和。我们可以让第三个指针,指向末尾,然后循环遍历第二个指针,4:第三层中,每次第二个指针到达一个位置,我们计算这两个指针的相加和是多少,如果大于需要的和,说明加多原创 2021-03-11 21:10:19 · 2765 阅读 · 1 评论 -
力扣---广度优先遍历(python实现)
目录一:从上到下打印二叉树:二:二叉树的层序遍历(自底向上):一:从上到下打印二叉树:class Solution: def bfs(self, root): res = [] # 构造返回数组 queue = [] # 构造一个队列 queue.append(root)# 首先将根节点加入队列 while(queue):# 一直循环 temp = [] for i in rang原创 2021-03-08 16:08:05 · 688 阅读 · 1 评论 -
牛客网---贪心算法(python实现)
不贪心如何拿Offer一:股票交易的最大收益:二:分糖果问题:一:股票交易的最大收益:假定你知道某只股票每一天价格的变动。你最多可以同时持有一只股票。但你可以无限次的交易(买进和卖出均无手续费)。请设计一个函数,计算你所能获得的最大收益。根据题意我们可以分析出来,只要是明天比今天涨了,我们就要这个收益。(贪心)class Solution: def maxProfit(self , prices ): res = 0 length = len(price原创 2021-03-08 15:06:57 · 579 阅读 · 0 评论 -
力扣---深度优先遍历DFS(python实现)
一:二:三:原创 2021-03-08 15:06:00 · 1603 阅读 · 0 评论 -
牛客网---堆(python实现)
堆是个什么玩意?能难住我?0:堆与堆排序:一:最小的K个数:二:寻找第K大:三:随时找到数据流的中位数:四:滑动窗口的最大值:0:堆与堆排序:# 构建大根堆:def heapify(arr, n, i): largest = i l = 2 * i + 1 # left = 2*i + 1 r = 2 * i + 2 # right = 2*i + 2 if l < n and arr[i] < arr[l]: # 根节点小于左节点 l原创 2021-03-05 20:52:21 · 292 阅读 · 0 评论 -
牛客网----动态规划(python实现)
动态规划难不倒我一:股票(一次交易):二:子数组的最大累加和:三:连续子数组的最大和:四:求路径:五:换钱的最少货币数:一:股票(一次交易):假设你有一个数组,其中第 i 个元素是股票在第i 天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。题目翻译: 给你一个数组, 找到两个从左到右,右面减左面最大的数。思路: 从左到右依次遍历, 每次用一个变量记录最小值,另外一个变量记录,收益最大。每次遍历的时候看看当前值-最小值是不是比原来的最大收原创 2021-03-05 20:38:37 · 515 阅读 · 0 评论 -
牛客网---排序算法(python实现)
冲一:排序算法1: 冒泡排序:2:选择排序:3:插入排序:4:希尔排序:5:快速排序:6:归并排序:7:堆排序:一:排序算法1: 冒泡排序:思想+ 时间复杂度:相邻两个进行排序,如果第一个比第二个大就交换。时间复杂度时O(N2)。实现:外层要排序n-1次(range(n-1)),内层要让j+1, 到达n-1,则需要range(n-i-1)def demo_sort(alist): n = len(alist) # 一共需要排序n-1次 for i in range(n原创 2021-03-05 18:53:45 · 642 阅读 · 1 评论 -
牛客网---栈与队列(python实现)
冲呀一:使用两个栈实现一个队列(栈):二: 使用两个队列实现一个栈(队列):三:括号序列(栈):四:设计getMin功能的栈(栈):五: 中缀表达式转换成后缀表达式:六:表达式求值:一:使用两个栈实现一个队列(栈):思想:push的时候正常, pop的时候,我们先把栈1的元素全部pop到栈2中, 然后栈2中pop出顶端的元素,最后再把栈2剩余的元素pop到栈1中去。class Solution: def __init__(self): self.stack1 = []原创 2021-03-05 18:50:49 · 369 阅读 · 0 评论 -
牛客网---二叉树(python实现)
王霸之气一:重建二叉树:一:重建二叉树:题目要求: 输入先序遍历和中序遍历,构建二叉树并返回。思路:递归创建, 每次将先序遍历的根节点取出来,作为当前节点, 然后左子树节点和右子树节点可以递归生成。递归边界是什么?当传递进来的先序遍历或者中序遍历只有一个结点的时候,即是叶子节点,我们...原创 2021-03-05 13:58:38 · 676 阅读 · 2 评论 -
牛客网---链表(python实现)
目录一: 判断链表是否有环:二:合并有序链表:三:链表中环的入口节点:四: 反转链表五:两个链表生成相加链表:六:两个链表的第一个公共结点:七: 判断一个链表是否是回文结构:八: 重排链表:九:一: 判断链表是否有环:思路: 让快慢指针分别指向头指针,然后快指针每次走两步,慢指针每次走一步,如果两个指针可以相撞,则表示链表有环。class Solution: def hasCycle(self , head ): fast = head slow = head原创 2021-03-04 18:41:32 · 495 阅读 · 1 评论