树状数组是一种数据结构,支持一些区间操作,比线段树好写,同样也比线段树的功能少一些。 先来看一张图(摘自百度百科) 树状数组就是这个样子的,但是树状数组的空间复杂度是O(n)的,它不像线段树那样每个节点的信息都上传的父亲去保存,他是由某一位来保存前一段区间的信息,比如说和。那么是哪一位又是保存多长的 ...
分类:
编程语言 时间:
2018-04-09 11:15:43
阅读次数:
252
给定一个链表的头节点head, 请判断该链表是否为回文结构。 例如: 1->2->1, 返回true。 1->2->2->1, 返回true。15->6->15, 返回true。 1->2->3, 返回false。进阶: 如果链表长度为N, 时间复杂度达到O(N), 额外空间复杂度达到O(1)。 ...
分类:
其他好文 时间:
2018-04-09 00:15:05
阅读次数:
130
给定一个矩阵matrix, 按照“之” 字形的方式打印这个矩阵, 例如: 1 2 3 4 5 6 7 8 9 10 11 12“之” 字形打印的结果为: 1, 2, 5, 9, 6, 3, 4, 7, 10, 11,8, 12【要求】 额外空间复杂度为O(1)。 ...
分类:
其他好文 时间:
2018-04-08 18:15:58
阅读次数:
125
转:https://blog.csdn.net/zxm490484080/article/details/72210501 算法复杂度分为时间复杂度和空间复杂度。 其作用: 时间复杂度是指执行算法所需要的计算工作量; 而空间复杂度是指执行这个算法所需要的内存空间。 时间复杂度 计算时间复杂度的方法: ...
分类:
其他好文 时间:
2018-04-07 13:54:58
阅读次数:
127
在数组中找到第k大的元素 你可以交换数组中的元素的位置 样例 给出数组 [9,3,2,4,8],第三大的元素是 4 给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推 挑战 要求时间复杂度为O(n),空间复杂度为O(1) 第一次我用的是冒泡排序,第 ...
分类:
其他好文 时间:
2018-04-07 12:48:52
阅读次数:
127
给定一个无序的数组,找出数组在排序后相邻的元素之间最大的差值。尽量尝试在线性时间和空间复杂度情况下解决此问题。若数组元素个数少于2,则返回0。假定所有的元素都是非负整数且范围在32位有符号整数范围内。 详见:https://leetcode.com/problems/maximum-gap/desc ...
分类:
其他好文 时间:
2018-04-06 19:31:20
阅读次数:
117
在使用O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 详见:https://leetcode.com/problems/sort-list/description/ 方法一:归并排序 方法二:快速排序 ...
分类:
编程语言 时间:
2018-04-06 15:33:49
阅读次数:
183
给定一个索引 k,返回帕斯卡三角形(杨辉三角)的第 k 行。例如,给定 k = 3,则返回 [1, 3, 3, 1]。注:你可以优化你的算法到 O(k) 的空间复杂度吗?详见:https://leetcode.com/problems/pascals-triangle-ii/description/ ...
分类:
其他好文 时间:
2018-04-05 13:27:18
阅读次数:
209
1.选择排序。 每次将最小的数,与剩余数做比较。找到更小的,做交换。 时间复杂度:O(n²) 空间复杂度:O(1) 优缺点:耗时但内存空间使用小。 2。冒泡排序 一轮比较两个相邻的数,获得一个最大的数仍在后边。 时间复杂度:O(n²) 空间复杂度:O(1) 优点:稳定。 3。插入排序 4。快速排序 ...
分类:
编程语言 时间:
2018-04-03 19:15:03
阅读次数:
219
由于需要分析算法的最好时间复杂度和最坏时间复杂度,因此这篇文章中写的排序都是从小到大的升序排序。 带排序的数组为arr,arr的长度为N。时间复杂度使用TC表示,额外空间复杂度使用SC表示。 好多代码都用到了交换arr[i]和arr[j]的地方,这里先给出代码。 (1)插入排序 1.1直接插入排序 ...
分类:
编程语言 时间:
2018-03-31 12:06:50
阅读次数:
147