精选微软等公司,数据结构+算法,经典面试100题 --------之前40题--------------------------算法面试:精选微软等公司经典的算法面试100题 第1-40题如下:--------------- --------------1.把二元查找树转变成排序的双向链表题目:输....
分类:
编程语言 时间:
2015-05-09 20:24:32
阅读次数:
207
1.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=16。 首先我们定义的二元查找树 ...
分类:
编程语言 时间:
2015-05-05 21:34:33
阅读次数:
153
基本思想:
基本思想主要就是两点:构建初始化堆和排序。
以构建最大堆为例,可以分为以下几个步骤:
1、将初始待排序序列(R0,R1,R2....Rn-1)构建成最大堆,此堆为初始的无序堆。
2、将堆顶元素R0与最后一个元素Rn-1交换,此时得到一个新的无序序列(R0,R1,R2....Rn-2)和新的有序序列Rn-1,且满足R[0,2...n-2]
3、由于交换后新的堆顶R0可能违反最大...
分类:
编程语言 时间:
2015-05-05 19:50:19
阅读次数:
171
基本思想:
冒泡排序是通过交换两个元素实现的,其思想是:
第一趟将待排序序列(A[0]~A[n-1])从前往后,两两相邻元素进行比较,若后者小,则交换,比较n-1次;
第一趟结束后,最大元素被交换到A[n-1]处(即沉底),下一趟排序只需要在(A[0]~A[n-2])中进行;
若在某趟排序中,未交换元素,说明子序列已经有序,则不在进行下一趟排序。该方法最多进行n-1趟。
冒泡排序...
分类:
编程语言 时间:
2015-05-05 19:40:20
阅读次数:
139
基本思想:
将初始序列(A[0]~A[n-1])作为待排序序列,第一趟在待排序序列(A[0]~A[n-1])中找最小值元素,与该序列中第一个元素A[0]交换,这样子序列(A[0])有序;下一趟排序在待排序子序列(A[1]~A[n-1])中进行。第 i 趟排序,A[i-1]~A[n-1] 中,找到最小元素,与该子序列中第一个元素 A[i-1] 交换。经过n-1趟排序后使得初始序列有序。...
分类:
编程语言 时间:
2015-05-05 16:34:15
阅读次数:
123
题目: 把一个数组最开始的若干个元素搬到数组的末尾, 我们称之数组的旋转。输入一个递增排序的数组的一个旋转, 输出旋转数组的最小元素。例如数组{3,4, 5, 1, 2 }为{ l1,2,3, 4,5}的一个旋转,该数组的最小值为1...
分类:
编程语言 时间:
2015-05-03 13:26:23
阅读次数:
144
思想:
1.首先生成1到n的数组A
2.生成1到n^3的n个数的随机数组P
例如A= P=
3.对p数组进行从小到大的排序(利用快速排序),生成数组P1=
4.根据3中P1的顺序,生成随机数数组A1=
代码:
#include
#include
#include
//快速排序,平均时间复杂度o(nlog2n),最好为o(log2n),最坏为o(n2).是不稳定排序( 交换排序)...
分类:
编程语言 时间:
2015-04-28 18:37:43
阅读次数:
183
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。...
分类:
编程语言 时间:
2015-04-28 09:44:47
阅读次数:
114
找出最长递增序列 O(NlogN)(不一定连续!)参考 http://www.felix021.com/blog/read.php?1587%E5%8F%AF%E6%98%AF%E8%BF%9E%E6%95%B0%E7%BB%84%E9%83%BD%E6%B2%A1%E7%BB%99%E5%87%B...
分类:
编程语言 时间:
2015-04-10 23:59:54
阅读次数:
314
参考http://www.ahathinking.com/archives/120.htmlvar arr = [2, 8,-2, 3, 5, -3, 2];//传统方法 O(n^2)function fun1(arr){ var maxSum =arr[0]; var maxSumArr = .....
分类:
编程语言 时间:
2015-04-10 19:37:14
阅读次数:
150