基础知识学习
文章平均质量分 82
算法,数据结构,设计模式
Q博士
这个作者很懒,什么都没留下…
展开
-
Kotlin练习-快速排序
[Java版本](http://blog.csdn.net/itfootball/article/details/41478761)object QuickSort { fun sort(array: MutableList<Int>): MutableList<Int> { if (array.size == 0 || array.size == 1) return array原创 2017-06-02 22:49:24 · 2658 阅读 · 1 评论 -
Kotlin练习-二分查找
Java版本object BinarySearch { /** * 从集合中查找某个元素所在的下标 */ fun search(sortedArry: MutableList<Int>, searchNum: Int): Int { if (sortedArry.size == 0) { println("没有找到该元素:$原创 2017-06-02 23:17:18 · 1449 阅读 · 0 评论 -
每天学一点算法-BFS
广度优先搜索定义广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法。简单的说,BFS 是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。BFS 同样属于盲目搜索。一般用队列数据结构来辅助实现 BFS 算法。算法步骤 1.首先将根节点放入队列中。2. 从队列中取出第一个节点,并检原创 2014-12-02 10:51:47 · 1096 阅读 · 0 评论 -
算法与数据结构面试题(8)-判断整数序列是不是二元查找树的后序遍历结果
题目(微软数据结构和算法面试100题中的第9题)判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序原创 2014-12-18 11:01:57 · 1292 阅读 · 0 评论 -
Scala练习-分块查找
原理 分块查找前言前几天研究Spark分区器的时候,Range分区器的原理中边界划定时就用到了分块查找算法,当时不知道这个名词,今天学习的时候,发现原理就是分块查找啊。多学习肯定没错的,一下子加速我的理解。代码package day15import day14.Utils/** * Created by doctorq on 2017/6/30. * 分块查找:适用于表结构动态变化的原创 2017-07-07 00:05:42 · 892 阅读 · 0 评论 -
每天学一点算法-选择排序算法
选择排序算法定义搜索整个数组,查找最小值元素,并将它与位于数组首位的元素交换;然后在除第一个元素的范围内查找最小值元素,并将它与位于数组次首位的元素交换;重复进行,直到数组最后一个元素终止。代码public class Selectionsort { public int[] sort(int[] a) { int min = a[0原创 2014-11-28 09:35:51 · 932 阅读 · 0 评论 -
Scala练习-哈希查找
原理原创 2017-07-05 21:28:41 · 658 阅读 · 0 评论 -
算法与数据结构面试题(23)-将字符串转化为整形
题目输入一个表示整数的字符串,把该字符串转换成整数并输出。 例如输入字符串"345",则输出整数 345。个人理解这个面试题不太 涉及算法和数据结构,主要考察你的编程习惯,有没有意识去做一些验证,对输入的校验。小问题验证大方面。乘机我们来看看java api中对这个问题的处理代码public static int parseInt(Strin原创 2014-12-31 16:55:29 · 3348 阅读 · 1 评论 -
算法与数据结构面试题(18)-二叉树镜像
题目输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。解题思路递归遍历每个结点,然后转换左右结点。代码前人写的二叉树java类,直接拿过来用。原创 2014-12-30 15:37:29 · 1264 阅读 · 0 评论 -
算法和数据结构面试题(12)-求二叉树最远距离
题目如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。代码public class Problem12 { private int maxLength; public int getLargestLength(BSTreeNode node) {原创 2014-12-23 09:02:30 · 1235 阅读 · 0 评论 -
算法与数据结构面试题(2)-设计包含min 函数的栈
题目设计包含min 函数的栈。定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。要求函数min、push 以及pop 的时间复杂度都是O(1)。个人解题思路1.存储结构采用数组2.min函数的添加:主要是每次push元素的时候,都要进行比较,保存最小的元素。所以里面要有一个保存最小元素的属性,用什么来存很关键。当你pop的元素刚好是最原创 2014-12-10 11:21:52 · 1118 阅读 · 0 评论 -
算法和数据结构面试题(16)-单链表倒置
题目链表操作(1)单链表就地逆置,(2)合并链表解题思路关于单链表1.创建单链表,需要首先写一个单链表的类。模仿LinkedList写一个SingleLinkedList类。import java.util.AbstractSequentialList;import java.util.Collection;impor原创 2014-12-29 21:59:18 · 1931 阅读 · 0 评论 -
每天学一点算法-SPFA算法
发明人:邓凡丁时间:1994时间复杂原创 2014-05-16 13:18:19 · 1444 阅读 · 0 评论 -
算法与数据结构面试题(13)-求链表倒数第K个节点
题目题目:输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0 个结点为链表的尾指针。解题思路需要2个指针,一个是遍历指针,一个是跟随指针。当遍历指针遍历到第K个元素的时候,跟随指针也要每次移动一步,保持和遍历指针的距离始终为K,当遍历结束的时候,跟随指针所指向的节点即为所求节点。代码public class Proble原创 2014-12-23 09:20:25 · 1220 阅读 · 0 评论 -
算法与数据结构面试题(6)-腾讯面试题
题目给你10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数要求下排每个数都是先前上排那十个数在下排出现的次数。上排的十个数如下:【0,1,2,3,4,5,6,7,8,9】初看此题,貌似很难,10 分钟过去了,可能有的人,题目都还没看懂。举一个例子,数值: 0,1,2,3,4,5,6,7,8,9分配: 6,2,1,0,0,0,1,0,0,00 在原创 2014-12-12 14:32:13 · 3144 阅读 · 0 评论 -
每天学一点算法-线性查找算法
线性查找算法定义BFPRT 算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分析,BFPRT 可以保证在最坏情况下仍为线性时间复杂度。该算法的思想与快速排序思想相似,当然,为使得算法在最坏情况下,依然能达到o(n)的时间复杂度,五位算法作者做了精妙的处理。步骤1.将n个元素每 5 个一组,分成n/5(上界)组。原创 2014-11-29 10:41:59 · 2872 阅读 · 0 评论 -
数据结构中的线性表
线性表定义零个或多个数据元素的有限集合。存储结构顺序存储结构用一段连续的存储单元依次存储线性表的数据元素链式存储结构n个结点链结成一个链表,即为线性表的链式存储结构,因为此链表的每个结点中只包含一个指针域,所以叫做单链表。原创 2014-12-29 15:45:13 · 1187 阅读 · 0 评论 -
Scala练习-二分查找
源码package day15import day14.Utilsimport scala.collection.mutable.ArrayBuffer/** * Created by doctorq on 2017/6/19. * 二分查找 */object BinarySearch extends Utils with App { def search(unSorted: A原创 2017-07-05 11:21:41 · 2719 阅读 · 0 评论 -
每天学一点算法-归并排序算法
归并排序算法定义归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。步骤1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置3. 比较两个指原创 2014-11-27 09:34:42 · 1099 阅读 · 0 评论 -
算法与数据结构面试题(19)-统计字符串中的字符个数
题目1. 有一字符串,请用任意语言,统计出该字符串里所有字母出现的次数,不区分大小写(所有字母均以大写进行计数,如有小写字母则需要统计在对应的大写字母计数中)另外请写出调试该程序的测试用例数据,包括输入及预期输出。如 输入: ABCa5z 预期输出: A 2, B 1 ,C 1, Z 1 输入: “ $3@ 预期输出: 无任何字母 原因:考虑不包括字母的原创 2014-12-30 15:46:25 · 2827 阅读 · 0 评论 -
每天学一点算法-堆排序算法
堆的数据结构转化为数组的定义:在起始索引为 0 的“堆”中: 1) 堆的根节点将存放在位置 0 2) 节点 i 的左子节点在位置 2 * i + 1 3) 节点 i 的右子节点在位置 2 * i + 2 4) 节点 i 的父节点在位置 floor( (i - 1) / 2 ) : 注 floor 表示“取整”操作 在起始索引为 1 的“堆”中: 1) 堆的根原创 2014-11-26 13:45:33 · 1098 阅读 · 0 评论 -
算法与数据结构面试题(3)-求子数组的最大和
题目输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。原创 2014-12-10 19:30:41 · 1143 阅读 · 0 评论 -
每天学一点算法-二分查找算法
二分查找算法定义二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一原创 2014-11-27 10:14:20 · 1228 阅读 · 0 评论 -
Scala练习-选择排序
package day14import day14.StraightInsertionSort.{printlnArray, sortN2}/** * Created by doctorq on 2017/6/28. * 选择排序 */object SelectionSort extends Utils with App { def sort(unSorted: Array[Int原创 2017-06-29 12:31:34 · 1515 阅读 · 0 评论 -
算法与数据结构面试题(11)-一次遍历得到链表的中间节点
题目如题解题思路参考个人理解代码原创 2014-12-23 09:09:56 · 969 阅读 · 0 评论 -
Scala练习-直接插入排序
源码package day14/** * Created by doctorq on 2017/6/26. * 直接插入排序,首先以a[0]作为一个有序数组,然后依次插入a[1]~a[n-1] */object StraightInsertionSort extends App { /** * * 普通模式,时间复杂度O(n2) * * @param原创 2017-06-28 08:01:11 · 1201 阅读 · 0 评论 -
Scala练习-斐波那契查找
斐波那契数列 原理原创 2017-07-06 11:05:48 · 1602 阅读 · 0 评论 -
算法与数据结构面试题(5)-查找最小的k 个元素
题目输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。理解1.其实之前看线性查找算法的时候就一直有一个疑问,像这种查找第K个最小数或者K个最小的数,为什么要用线性查找算法这么难以理解的算法,难道随便用一个排序算法后,再遍历获得第K个小的数或者K个最小的数不好么?2.既然这一原创 2014-12-11 10:35:39 · 2564 阅读 · 0 评论 -
每天学一点算法-DFS
DFS深度优先算法定义深度优先搜索算法(Depth-First-Search),是搜索算法的一种。它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有原创 2014-12-01 11:30:48 · 1633 阅读 · 0 评论 -
算法与数据结构面试题(10)-颠倒链表
题目用一种算法来颠倒一个链接表的顺序。现在在不用递归式的情况下做一遍。解题思路1.先用递归颠倒2.尝试不用递归颠倒代码1.递归式public class Problem8 { public LinkedListNode invert(LinkedListNode node) { if (node == null) {原创 2014-12-19 11:15:46 · 1693 阅读 · 0 评论 -
Scala练习-基数排序
基数排序 源码package day14import scala.collection.mutable.ArrayBuffer/** * Created by doctorq on 2017/6/29. * 基数排序 */object RadixSort extends Utils with App { /* 获取数组中最大值 */ def max(unSo原创 2017-06-29 23:39:35 · 830 阅读 · 0 评论 -
每天学一点算法-Dijkstra算法
有向图非负权最短路径算法,时间复杂度O(n的平方)。原创 2014-05-16 00:02:09 · 2456 阅读 · 0 评论 -
Scala练习-希尔排序
参考文章: 白话经典算法系列之三 希尔排序的实现 ShellSortpackage day14/** * Created by doctorq on 2017/6/28. * 希尔排序:缩小增量排序 * 时间复杂度nlog2n~n2之间 */object ShellSort extends App with Utils { def sort(unSort: Arra原创 2017-06-28 22:48:33 · 994 阅读 · 0 评论 -
算法与数据结构面试题(21)-在一个字符串中找到第一个只出现一次的字符
题目在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。解题思路上一道题是求字符串中各个字符的个数,其实大同小异,这道题比上道题还要简单点,只需要得到第一个为1的就结束遍历。比较容易。但是需要改造一些之前的代码public class CharCount { public void count(String str) {原创 2014-12-30 17:04:37 · 1728 阅读 · 0 评论 -
Scala练习-排序算法总结
之前用Scala实现了9个排序算法,后续有时间凑个10大。源码已经全部上传到github冒泡快排归并桶基数插入选择希尔堆其时间复杂度对比如下图(盗图)原创 2017-06-30 09:17:54 · 1298 阅读 · 0 评论 -
冒泡排序
冒泡排序它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。时间复杂度O(n^2)代码public class BubbleSort { public void sort(int[] data) { // 升序 if (原创 2014-12-23 10:34:56 · 962 阅读 · 0 评论 -
算法与数据结构面试题(7)-链表“香蕉”问题
题目微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1,h2,判断这俩个链表是否相交。 为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点?解题思路1.先了解一下什么是有环链表2.查找判断是否相交的方法3.求出列表相交的第一个节点。解题步骤原创 2014-12-14 13:32:38 · 1609 阅读 · 0 评论 -
每天多一点算法-插入排序算法
插入排序算法定义插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......第N-1次,数组前N-1个元素组成有序的数组,将数原创 2014-11-28 10:54:21 · 1100 阅读 · 0 评论 -
Scala练习-快速排序
def sort(unSortList: List[Int]): List[Int] = { if (unSortList.isEmpty || unSortList.size == 1) return unSortList val flag: Int = unSortList.head //过滤得到小于等于基准值的数据 val lessFlag = for (item原创 2017-06-19 17:58:09 · 1384 阅读 · 0 评论 -
算法和数据结构面试题(24)-几个数的和等于m
题目输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来.解题思路有没有和之前做过的一题有点类似。算法与数据结构面试题(14)-在数组中查找2个数的和为已知数但是这一题不只是求出2个数之和,任意个数之和等与m。动态规划法-背包问题:例如上图,比原创 2015-01-01 14:26:49 · 2249 阅读 · 0 评论