算法一般由循环、顺序、选择3种控制结构组合而成
排序
写出几种常见的排序算法
内部排序
插入排序
需要进行n-1次比较
希尔排序
需要进行n-1次比较
基数排序(桶排序)
归并排序也叫分治排序
关于算法稳定性:
快速排序、选择排序、堆排序、希尔排序是不稳定性算法,其他都是稳定算法。
递归思想:
如果某个递归函数最终一定会结束,那么这个函数一定使用了全局变量或者使用了一个或多个参数。
外部排序
当待排序的序列中数据元素太多无法满足内部排序的运行时,会使用外部存储进行外部排序。分为2个阶段:第一阶段,根据内存大小将序列分成若干段,每一段都能够存储在内存中,并使用内部排序方法在内存中完成排序,然后把排好序的段(初始归并段
)存储到外存中。第二阶段,使用归并排序对这些初始归并段进行归并,逐渐扩大归并段的长度并减少归并段的数量,直到只剩下一个归并段为止。第二阶段在外存中完成。
(Java实现)
简单记录下几个算法题目
题目1
Java实现水仙花数的方法
4-24的水仙花数
拓展:3位数的各位三次幂之和是自己本身,
n位数的各位n次幂之和是自己本身。
题目2:
给定一组含有对象的数组,对象有id和price属性,
变式一:给定一个totalPrice,找出其中所有price相加之和为totalPrice的两个对象的id,并输出一个新的数组。
变式2:给定一个minPrice和maxPrice,找出其中所有price相加之和在minPrice和maxPrice之间的两个对象的id,并输出一个新的数组。
题目3
渡轮运送汽车,每次可以运1辆,2辆或者3辆。实现一个输入汽车数量,输出渡轮每次运送汽车方案的方法。
比如,
输入:3
输出:4(有3个方案:(3)(1,2)(2,1)(1,1,1))
题目4
输入一个短句和一个长句,判断长句是否包含短句,如果包含输出true,否则输出false(包含的定义是短句中所有的字符都包含在长句中,即在长句中都能找到)
题目5
反转一个单链表。
实例:
输入:1->2->3->4->5,
输出:5->4->3->2->1
题目6
将整数数组[7,6,3,5,4,1,2]按照堆排列的方式原地进行升序排列,请问在第一轮排序结束之后,数组的顺序是:
2635417
6235417
6532417
1532467
题目7
判断整数数组是否是二元查找树的后序遍历结果,如果是返回true,反之返回false。
样例输入:[5,7,6,9,11,10,8]
样例输出:true
题目8
求长度分别为M和N的字符串的最长公共子串,其时间复杂度为(O(M*N))。