
数据结构算法
文章平均质量分 97
AC
funNLPer
2 B A NB NLPer
展开
-
剑指offer算法题python实现
1. 二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路TODO…程序class Solution: # array 二维列表 def Find(self, target, array): # w...原创 2020-05-10 21:17:27 · 647 阅读 · 1 评论 -
LeetCode刷题
1. 剑指 Offer II 039. 直方图最大矩形面积给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10暴力法遍历整个heights列表,每次都以当前的height作为高,计算面积,此时只需向左和向右找到第一比当前低的柱子,即为左右边界,然后更新最大面积class Solu原创 2021-11-06 17:27:12 · 228 阅读 · 0 评论 -
时间复杂度为nlogn的算法总结
1. 排序链表在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5题解题目要求时间空间复杂度分别为O(nlogn)和O(1),根据时间复杂度我们自然想到二分法,从而联想到归并排序;通过递归实现链表归并排序,有以下两个环节:分割 cut原创 2020-12-23 15:07:53 · 7729 阅读 · 0 评论 -
求x的平方根
1.题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。1.1 牛顿法假设求a的平方根a=x\sqrt a=xa=x,即求方程 x2−a=0x^2-a=0x2−a=0 的解牛顿法迭代公式为:xn+1=xn−f(xn)f′(xn)x_{n+1}=x_{n}-\frac{f\left(x_{n}\right)}{f^{\prime}\left(x_{n}\right)}xn+1=xn−f′原创 2020-12-23 15:06:52 · 545 阅读 · 0 评论 -
数据结构:树的相关概念
树的知识框架结构如下图所示:1.平衡二叉搜索树平衡二叉搜索树(Balanced Binary Search Tree),英文简称 BBST。经典常见的平衡二叉搜索树是AVL 树和红黑树1.1 二叉搜索树二叉搜索树(Binary Search Tree)是二叉树的一种,英文简称 BST。又称为二叉查找树、二叉排序树。它的特点是任何一个结点的值都大于其左子树的所有结点的值,都小于其右子树的所有结点的值。1.2 平衡平衡(Balance):就是当结点数量固定时,左右子树的高度越接近,这棵二叉树越平原创 2020-08-17 22:21:10 · 196 阅读 · 0 评论 -
拓扑排序
1. introduction拓扑排序(Topological Sort)并不是一个纯粹的排序算法,它只是针对某一类图,找到一个可以执行的线性顺序2. 有向无环图DAG拓扑排序只是针对特定的一类图,那么是针对哪类图的呢?答:Directed acyclic graph (DAG),有向无环图。即:这个图的边必须是有方向的;图内无环下图左边不是环,右边是如果一个图里有环,比如右图,想执行1就要先执行3,想执行3就要先执行2,想执行2就要先执行1,这成了个死循环,无法找到正确的打开方式,所原创 2020-07-09 00:53:05 · 665 阅读 · 0 评论 -
数据结构:图
1. 图的数据表示1.1 邻接矩阵法若存在点iii到点jjj的边, 则矩阵A中A[i,j]A[i, j]A[i,j]等于1,否则等于0# 1.图的数据表示法:邻接矩阵法# data里面每个列表存的是一个边的起点和终点data = [[1,2], [2,1], [1,5], [5,1], [2,3], [3,2], [2,4], [4,2], [3,4], [4,3]]arr = [[0]*6 for i in range(6)]# 构建邻接矩阵for i in range(len(data原创 2020-07-06 00:11:28 · 157 阅读 · 0 评论 -
面试算法题&高频题
1. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。解法一:时间复杂度O(n2)O(n^2)O(n2)class Solution(object): def lengthOfLIS(self, nums): """ :type nums: List[int] :rtype: int原创 2020-05-22 11:03:41 · 509 阅读 · 1 评论 -
链表总结(基于python)
1.单向链表的反转class ListNode: def __init__(self, x): self.val = x self.next = Nonedef inverse(head): r = None p = head while p != None: q = p p = p.next q.next = r r = q return q # q ...原创 2020-05-01 10:13:53 · 339 阅读 · 0 评论 -
排序算法总结
1. 一些概念稳定的排序:数据在经过排序后,两个相同键值的记录仍然保持原来的次序,也就是两个相同的值在排序后前后顺序不变;常见的稳定排序算法有:冒泡、插入、希尔排序 、基数排序;不稳定的排序算法有:选择排序、快速排序、堆积排序。原地排序:指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序;希尔排序、冒泡排序、插入排序、选择排序、堆排序、快速排序都是原...原创 2020-04-04 00:42:38 · 884 阅读 · 2 评论 -
树的相关操作
树的深度优先遍历包含三种方法,分别是:前序遍历(根左右)中序遍历(左根右)后序遍历(左右根)区分这三种遍历方式主要看根的位置而宽度优先的遍历方式主要是用队列,将节点存入,然后递归读取数据具体实现见下方程序class TreeNode: def __init__(self, value): self.val = value self.left = None self....原创 2020-03-28 12:39:49 · 312 阅读 · 0 评论 -
回溯算法(深度优先+状态重置+剪枝)
1.什么是回溯算法“回溯”算法也叫“回溯搜索”算法,主要用于在一个庞大的空间里搜索我们所需要的问题的解。“回溯”指的是“状态重置”,可以理解为“回到过去”、“恢复现场”,是在编码的过程中,是为了节约空间而使用的一种技巧。而回溯其实是“深度优先遍历”特有的一种现象。之所以是“深度优先遍历”,是因为我们要解决的问题通常是在一棵树上完成的,在这棵树上搜索需要的答案,一般使用深度优先遍历。2. 示例...原创 2020-02-12 21:42:48 · 2366 阅读 · 0 评论 -
动态规划总结
1.动态规划三大步骤动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤(1) 定义数组元素的含义上面说了,我们会用一个数组,来保存历史数组,假设用一维数组 dp[] 吧。这个时候有一个非常非常重要的点,就是规定你这个数组元素的含义,例如你的 dp[i] 是代表什么意思...原创 2020-02-11 22:18:14 · 477 阅读 · 1 评论