一、数据结构 什么是数据结构:数据与数据之间的关系。 数据的存储结构:顺序存储(ArrayList)、链式存储(LinkList)。 数据的逻辑结构:集合结构、线性结构、树形结构、图形结构。 二、算法 算法:解决问题的方法。 算法的特性:输入、输出、有穷、确定性、可行性。 算法的基本要求:正确性、可 ...
分类:
编程语言 时间:
2020-03-18 11:15:59
阅读次数:
72
衡量算法快慢的标准 时间复杂度 空间复杂度 占用的内存空间 1. 常见的时间复杂度(按效率排序) O(1)list[j+1]: list[j],list[j+1]=list[j+1],list[j] flag=False 只要走过一次循环就会更改这个值 if flag: 若一次循环条件if没走到,换 ...
分类:
编程语言 时间:
2020-03-15 13:32:07
阅读次数:
47
一:解题思路 这道题目有2种方法,第一种是递归法,第二种是迭代法。2种方法的时间和空间复杂度都为O(n)。 二:完整代码示例 (C++版和Java版) 递归C++: class Solution { public: void postorder(TreeNode* root, vector<int> ...
分类:
其他好文 时间:
2020-03-14 18:25:21
阅读次数:
53
七、递归和循环 1. 斐波那契数列 题目描述: ? 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 ? n2),假设n级台阶有f(n)种跳法。第一次跳有两种选择:一种是只跳一级,此时跳法的数目等于后面剩下的n 1级台阶的跳法数目,即为f(n 1 ...
分类:
其他好文 时间:
2020-03-14 16:53:28
阅读次数:
62
一:解题思路 这道题目2种做法。第一种做法就是递归法,第二种就是迭代法。这2种方法的时间复杂度和空间复杂度都为O(n)。 二:完整代码示例 (C++版和Java版) 递归C++: class Solution { public: void preorder(TreeNode* root, vecto ...
分类:
其他好文 时间:
2020-03-14 16:31:41
阅读次数:
46
本人使用的书是李春葆主编的数据结构教程第五版; 第一章呢,讲了一些时间复杂度,空间复杂度,数据的逻辑结构物理结构等等的一些定义以及一些简单的代码示例; 集合、线性结构、树形结构、图形结构; 顺序存储结构、链式存储结构、索引存储结构、哈希存储结构; 第五版相较于第四版增加说明了一下 typedef , ...
分类:
其他好文 时间:
2020-03-14 14:54:52
阅读次数:
63
class Solution { public int lengthOfLongestSubstring(String s) { int[] dict = new int[256]; Arrays.fill(dict, -1); int maxLen = 0, start = -1; for (in ...
分类:
编程语言 时间:
2020-03-12 14:37:50
阅读次数:
71
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 class Solution { publ ...
分类:
其他好文 时间:
2020-03-11 23:59:07
阅读次数:
113
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1: 输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1] 示例 2: 输入:nums = [1,2,10,4,1,4,3, ...
分类:
编程语言 时间:
2020-03-11 23:34:53
阅读次数:
67
非线性时间比较类 1. 交换排序 1.冒泡排序 思想:从前往后扫描,如果相邻两个元素的大小不满足要求,则进行交换。因此,每一轮可以将最大的元素放到最后一位,下一轮扫描时,就无需进行到最后一位了。 时间复杂度:进行两重循环,因此是O(n^2) 空间复杂度:原地排序,无需其他额外的空间,因此是O(1) ...
分类:
编程语言 时间:
2020-03-11 15:46:02
阅读次数:
75