04 2017 档案
摘要:一、将各种数据排序 只要实现了Comparable接口的数据类型就可以被排序。 但要使算法能够灵活地用不同字段进行排序,则是后续需要考虑的问题。 1、指针排序 在Java中,指针操作是隐式的,排序算法操作的总是数据引用,而不是数据本身。 2、键不可变 如果在排序后,用例还可以改变键值,那么数组很可能
阅读全文
摘要:一、简介 堆排序可以分为两个阶段:构造堆和下沉排序两个阶段。 构造堆:将原始数组重新组织为一个堆。 下沉排序:从堆中按递减顺序取出所有元素并得到排序结果。 二、实现 1、堆排序 中规中矩的方法: 从左向右遍历整个数组,用swim方法保证当前位置左侧的所有元素已经是堆有序的即可。 就像连续向优先队列中
阅读全文
摘要:一、简介 在很多应用中,允许用例对已经进入优先队列中的元素非常有必要。 一个简单的实现方法是对每个元素关联一个索引。 索引优先队列API: 二、实现 通过对普通优先队列的实现进行拓展来实现索引优先队列。 思路: (1)增加数组keys用来保存优先队列元素(item or key) (2)pq数组则改
阅读全文
摘要:一、优先队列 许多应用程序都需要处理有序的元素,但又不一定要求全部有序,或不要求一次就排序完成。 在这种情况下,一个合适的数据结构应该支持两种操作:删除最大元素和插入元素。这就是优先队列。 API: 优先队列最重要的操作就是删除最大元素和插入元素。 二、基础实现 1、数组实现(有序) 在insert
阅读全文
摘要:思路一: 1、先求出两个链表ListA,ListB的长度LengthA,LengthB。 2、然后先把长的链表头指针先往前走|LengthA - LengthB|步。 3、最后两个链表头指针同步往前走一步,直到指向的对象相同。 代码实现及测试用例: 思路2: 不用求出链表长度的值,但其实算法复杂度是
阅读全文
摘要:一、一定会相遇的证明 1、如果链表没有环,那么快指针比慢指针先到达尾部(null)。 2、如果链表有环的话,因为快指针走的比慢指针快,所以在环中相遇的过程可以看作是快指针从环后边追赶慢指针的过程。 用递归法证明,快慢指针一定会相遇: (1)快指针与慢指针之间差一步。此时继续往后走,慢指针前进一步,快
阅读全文