摘要:二分查找 普通循环代码: java // 二分查找的递归实现 public int bsearch(int[] a, int n, int val) { return bsearchInternally(a, 0, n 1, val); } private int bsearchInternally
阅读全文
摘要:散列表(Word文档中的单词拼写检查功能) 优势 + 模拟映射关系 + 防止重复 + 缓存、记住数据,以免服务器再通过处理生成。 + 查找、插入、删除都非常快。 + 可以结合散列函数和数组来创建散列表,一般编程语言都提供了实现。 散列表执行各种操作的时间都为O(1),常量时间,无论散列表多大,所需时
阅读全文
摘要:跳表 对链表改造一波,可以支持类似“二分”的查找算法,改造成跳表。 快速的插入删除查找,有些时候可以替代红黑树。 核心思想 是对链表建立一层索引(比如隔两个结点提取一个结点到上一级),减少遍历节点的数目。 进阶思想 是再加一层索引。 链表加多级索引的结构,就是跳表。 我的感觉思想比较接近向上生长的二
阅读全文
摘要:Java学习笔记02 要点记录: 1. 二维数组的维数 haha [][] // 已定义 int rowLength=haha.length;// 行数 int colLength=haha [i].length;// 列数。 2.String有不可变性,每次连接按键中读取的字符串都会构建一个新的S
阅读全文
摘要:排序 冒泡 原地排序 :就是特指空间复杂度是 O (1) 的排序算法。以下三个都是原地排序。 稳定性 :如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。 冒泡特色: + 原地排序,空间复杂度O(1)。 + 稳定的排序算法。 + 最好情况,一次冒泡操作,时间复杂度O(
阅读全文
摘要:栈、队列、递归 两个栈实现表达式求值 实际上,编译器就是通过两个栈来实现的。其中一个保存操作数的栈,另一个是保存运算符的栈。我们从左向右遍历表达式,当遇到数字,我们就直接压入操作数栈;当遇到运算符,就与运算符栈的栈顶元素进行比较。 如果比运算符栈顶元素的优先级高,就将当前运算符压入栈;如果比运算符栈
阅读全文
摘要:链表 有些语言有 “指针” 的概念,比如 C 语言;有些语言没有指针,取而代之的是 “引用”,比如 Java、Python。不管是 “指针” 还是 “引用”,实际上,它们的意思都是一样的,都是存储所指对象的内存地址。 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存
阅读全文
摘要:数组与容器 线性表 每个线性表上的数据最多只有前和后两个方向。 数组、链表、队列、栈都是线性表。 与此对应,非线性表指数据之间不是简单的前后关系。比如:二叉树、堆、图等。 数组有 连续的内存空间和相同类型的数据 ,这两个特性可以使其“ 随机访问 ”。 纠正知识点:数组和链表的区别 链表适合插入、删除
阅读全文
摘要:复杂度计算 O (logn) 第2行申请一个空间存储变量i,可以忽略,和n无关。 第三行申请了大小为n的int类型数组,除此之外,无更多空间占用。故复杂度为O(n)。 均摊时间复杂度 大部分情况下,不必区分最好、最坏、平均情况时间复杂度三种情况。 java // array 表示一个长度为 n 的数
阅读全文
摘要:1. ArrayList更像是一个动态数组,不是链表。而且ArrayList可以向普通数组转换。 2. 使用final修饰符意味着这是继承树的末端,不能被继承。 3. 在多态下,引用与对象可以是不同的类型。 Animal为父类,Dog为子类。 4. 有些类不可以被初始化,比如并没有一个对象叫“动物”
阅读全文