官方解题给出了四种解法。 第一种,暴力法,时间复杂度O(n*k)。 第二种,额外构建一个等大数组,将额外数组作为中介进行两次全数组的拷贝。时间代价为O(n)。空间代价也为O(n)。 第三种,环状替换,也是我自己实现的方法。时间代价O(n),空间代价O(1)。 如果我们直接把每一个数字放到它最后的位置 ...
分类:
编程语言 时间:
2020-08-26 17:11:58
阅读次数:
51
给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) ...
分类:
其他好文 时间:
2020-08-18 13:57:25
阅读次数:
61
1.常见的时间复杂度和空间复杂度有哪些?O(1):constantcomplexity:constant常数复杂度O(logn):对数复杂度O(n):线性时间复杂度O(n^2):平方O(N^3):立方O(2^n):指数O(n!):阶乘2.时间复杂度和空间复杂度的重要性随着现在存储空间的便宜,很多情况下,我们是愿意用空间复杂度来换取时间复杂度的,因为内存,磁盘等这些和程序算法比起来,真的是太便宜的,
分类:
其他好文 时间:
2020-08-18 13:41:29
阅读次数:
80
上节回顾 上一章我们介绍了二叉树,二叉搜索树相关的一些知识。 当一个二叉搜索树是一个满二叉树,或者是完美二叉树的时候可以计算一下二叉搜索树的查找,插入,删除的时间复杂度。 从代码来看它们的时间复杂度都是和树的高度相关的。 满二叉树的高度是$log_2(n + 1)$,完美二叉树的高度是$floor( ...
分类:
其他好文 时间:
2020-08-17 17:10:18
阅读次数:
56
隔了几个月,又开始写博客了qwq kruskal时间复杂度为O(nlogn)它的算法思路是这样的:我们根据边的权值将所有边排序,然后枚举每条边,用并查集去查询这条边的两个端点是否在同一集合内,若在同一集合内,则删掉这条边,若不在同一结合则加入这条边,并将这两个端点所在的集合合并。附一下代码: 123 ...
分类:
其他好文 时间:
2020-08-17 17:07:58
阅读次数:
90
直接插入排序 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 将新 ...
分类:
编程语言 时间:
2020-08-10 13:13:59
阅读次数:
60
105. 复制带随机指针的链表 中文English 给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点。 返回一个深拷贝的链表。 挑战 可否使用O(1)的空间 hashmap写法,O(n)时间复杂度 """ Definition for singly-linked l ...
分类:
其他好文 时间:
2020-08-10 00:07:54
阅读次数:
70
JZOJ8月8日提高组反思 T1 一开始打了个暴力 后来突然觉得是不是可以构造答案 然后就奇奇怪怪的调了1h 结果呢 Re…… 估计还是没调完 T2 这这这 好熟悉 往0点连,然后最小生成树跑一遍 结果呢 估计是没开$long\ long$ T3 序列加长后找长度为$n$的序列使得逆序对最少 计算时 ...
分类:
其他好文 时间:
2020-08-08 17:30:58
阅读次数:
57
https://www.cnblogs.com/chris-zeng/p/10540291.html 数组: 优点:数组在内存中是连续存储的、所以它的索引速度是非常快的、时间复杂度为O(1)、而且它的赋值/修改/获取元素也是非常简单的。 缺点:1、定义数组的时候需要指定数组的长度(过长会造成内存浪费 ...
分类:
编程语言 时间:
2020-08-05 10:30:33
阅读次数:
70
题目描述 给出两个字符串S和T,要求在O(n)的时间复杂度内在S中找出最短的包含T中所有字符的子串。 例如: S ="ADOBECODEBANC" T ="ABC" 找出的最短子串为"BANC". 注意: 如果S中没有包含T中所有字符的子串,返回空字符串 “”; 满足条件的子串可能有很多,但是题目保 ...