![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
weixin_42819084
这个作者很懒,什么都没留下…
展开
-
算法题:最小生成树(Kruskal算法,Prim算法)
题目:冗余连接(leetcode 684)输入一个图,该图由一个有着N个节点(节点不重复1,2,…,N)的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u,v],满足u<v,表示连接顶点u和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边[u,v]应满足相同的格式u < v。分析:如果两个节点有相同的根,则连接原创 2020-08-26 06:05:53 · 888 阅读 · 0 评论 -
KMP算法(字符串匹配问题)
解决字符串之间匹配的问题。题目(leetcode 28):KMP算法是一种空间换时间的算法。它的特点是主串的指针不往回走,利用存储好的信息,避免重复的运算。**在子串那构建一个PMT(Partial Match Table)表。PMT中的值是字符串的前缀集合(除去最后一个元素)与后缀集合(除去第一个元素)的交集中最长元素的长度。(元素集合不包括元素本身)**例如:‘ababa’。前缀集合(‘a’,‘ab’,‘aba’,‘abab’),后缀集合(‘baba’,‘aba’,‘ba’,‘a’),两个集合交集的原创 2020-08-26 00:42:24 · 258 阅读 · 0 评论 -
最短路径(Dijkstra算法),一文必看懂最短路径的方法
最短路径问题从图中的某一个顶点出发到达另一个顶点的所经过的边的权重和最小的一条路径,称为最短路径。Dijkstra算法适用于求一个节点到其他节点的最短路径,主要特点是通过广度搜索(由近及远、层层扩展)来遍历其他所有需要求距离的点的思想来解决最短路径问题。一个辅助数组D,记录从起始节点到当前节点的最短距离。一个辅助数组V,观察这个节点是否需要记录下来。第一轮的迭代:一开始的起始节点是A,A到A的距离为0。然后看A附近的邻居节点(B,C,D)的距离(A到B,C,D最短路径长度)。E道不了所以是正无穷。原创 2020-08-25 20:20:47 · 12879 阅读 · 2 评论 -
图的遍历:BFS DFS
BFS(Breath First Search)算法过程1.首先将根节点放入队列中2.从队列中取出第一个节点,进行访问,并将其所有未访问过的邻居加入队列中3.若队列为空,则算法结束(或者找到了需要访问的节点)第一次遍历:0第二次遍历:1,2,3,4第三次遍历:5,6,7,9时间复杂度:不确定!V代表节点的数量,E代表边的数量邻接表表示时,查找所有顶点的邻接点所需时间为O(E),访问顶点的邻接点所花时间为O(V),总的时间复杂度为O(V+E)。因为邻接表的储存形式和上面的图的类似,分为原创 2020-08-07 01:56:03 · 132 阅读 · 0 评论 -
哈希表搜索法,二分查找法
哈希表搜索法数组的特点是:寻址容易,插入和删除困难。而链表的特点是:寻址困难,插入和删除容易。哈希表就是把数组和链表相结合,即可以通过索引快速找到想找的值,也可以通过里面的链表进行插入和删除。在python中就是用字典来实现这个功能的,可以通过字典里的key快速找到想找的值,也可以删除这个值。插入可以随便插,因为是个无序的列表。字典的定义:字典是"键值对"的无序可变序列,字典中的每个元素都是一个"键值对",包含:“键对象”,和"值对象"。可以通过"键对象"实现快速获取,删除,更新对应的"值对象"。原创 2020-08-03 21:58:46 · 500 阅读 · 0 评论 -
冒泡排序,快速排序,堆排序,滑动窗口,双指针
冒泡排序这个算法的核心之处就是在每个相邻的元素都进行比较,如果不是按顺序的形式,就彼此交换。这个算法不适合用于大数据量的排序,因为它的平均时间复杂度和最差时间复杂度都是o(n^2)。写代码时,N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。n=len(arrList)for i in range(n-1): for j in range(n-1-i): if arrList[i+1] < ar原创 2020-08-01 16:32:50 · 368 阅读 · 0 评论 -
剑指offer:整数中1出现的次数(一次看懂python)
题目:求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。题目意思就是求1到n这些数中1出现的次数。我们要用一个for循环去遍历每一位上的数,然后固定这个数取看看其他数的位置上出现1的个数,然后把它们全相加了就能得到结果了。然后固定的位数上有三种情况原创 2020-07-31 21:12:18 · 208 阅读 · 0 评论 -
剑指offer:孩子们的游戏(第一次看就能看懂)python
题目:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得到这原创 2020-07-30 16:14:14 · 107 阅读 · 0 评论 -
剑指offer:动态规划
动态规划记忆化搜索,把已经计算过的内容存下来,不需要重复计算。(斐波那契数列)自上而下。memo = [-1] * (n + 1)def f2(n): if n == 0: return 0 if n == 1: return 1 if memo[n] == -1: memo[n] = f2(n - 1) + f2(n - 2) return memo[n]动态规划:将原问题拆解成若干子问题,同时保存子问题的答案,使得每个子问题只求解一次,最终获得原问题的答案。斐波那契数列是自原创 2020-07-18 21:52:21 · 83 阅读 · 0 评论 -
剑指offer:排序
冒泡排序:这个算法的核心之处就是在每个相邻的元素都进行比较,如果不是按顺序的形式,就彼此交换。这个算法不适合用于大数据量的排序,因为它的平均时间复杂度和最差时间复杂度都是o(n^2)每一次都要循环n-1…n-2…n-2…0,所以时间复杂度为(0+n-1)*n/2n=len(arrList)for i in range(n-1): for j in range(n-1-i): if arrList[i+1] < arrList[i]: arrList[i],arrList[i+1]原创 2020-05-17 13:41:21 · 172 阅读 · 0 评论 -
剑指offer:树有关的题目(python)
树节点上存储val,然后两个指针分别是left和right。#定义一个二叉树class TreeNode(object): def __init__(self,x): self.val = x self.left = None self.right = None.#存储二叉树if __name__ == '__main__': t1 = TreeNode(1) t2 =...原创 2020-05-12 23:04:40 · 223 阅读 · 0 评论 -
剑指offer:其他思维方式(python版本)
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。补码:正数不变,负数是它正数的反码+1例如:-2:111…1101+1即111…110#只取n的前32位,n&32个1(0xFFFFFFFF)#一个F是四位在十六进制里面#简易做法:n = 0xFFFFFFFF&ncount = 0for c in str(bin(n)): if c == "...原创 2020-05-06 21:38:51 · 126 阅读 · 0 评论 -
剑指offer:数组,栈,队列(python)
数组:数组给定空间但可以不给定确定的值,元组给定空间和具体的值,列表即可以不给定空间也可以不给定确定的值。栈:栈在Python中其实也是一个列表,先进后出队列:先进先出就是队列。题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。因为它是一个递...原创 2020-05-05 04:08:26 · 168 阅读 · 0 评论 -
剑指offer:链表
链表分为单向链表,双向链表和循环链表普通链表结构def __init__(self,x): self.val=x self.next=Nonedef printChain(node): print(node.val) node=node.nextif __name__=='__main__': l1=ListNode(1) l2=ListNode(2) l3=ListNode...原创 2020-04-29 22:08:30 · 74 阅读 · 0 评论 -
剑指offer:斐波那契数列
斐波那契数列斐波那契数列就是一个数学数列:0,1,1,2,3,5,8…规律就是后面的数是前两个数之和,f(n)=f(n-1)+f(n-2)第一种递归实现(python):class Solution: def Fibonacci(self,n): if n==0: return 0 if n==1: return 1 if n>1: num=self....原创 2020-04-18 19:09:14 · 58 阅读 · 0 评论 -
剑指offer2 从零开始详细刷题思路(时间复杂度和空间复杂度)
刷题地址(牛客网):https://www.nowcoder.com/ta/coding-interviews?page=1**一。课前必备**首先需要了解两个必不可少的概念:时间复杂度和空间复杂度时间复杂度和空间复杂度是用来评价算法效率高低的2个标准,*时间复杂度:*就是说执行算法需要消耗的时间长短,越快越好。*空间复杂度:*就是说执行当前算法需要消耗的存储空间大小,也是越少越好。...原创 2020-04-18 17:30:20 · 161 阅读 · 0 评论