11 2017 档案
摘要:如何在O(1)时间复杂度内求栈中最小元素呢?可以使用两个栈来实现该问题。 参考《Java程序员面试笔试宝典》的实现方法:使用两个栈结构,一个栈(记为S1)用来存储数据,另一个栈(记为S2)用来指示着栈S1的最小元素。元素入栈S1时,如果当前入栈的元素比栈S2中已有元素还小,则把该元素也入栈S2;出栈
阅读全文
摘要:快速排序算法是一种较为高效的排序算法,采用了“挖坑填数+分而治之”的思想。该算法的时间复杂度最好时为O(nlogn),最差时为O(n^2),空间复杂度为O(logn),也是不稳定的,适合n值较大的排序任务。 该算法的基本思想是:每次排序都找一个基准位,使得基准位前端的部分每个数都小于该基准位上的数,
阅读全文
摘要:问题描述:一个数组存在前后两个子序列,并且每个子序列都是有序的,两个子序列的分界处为n.实现对该数组两个子序列合并并进行从小到大的排序。样例输入:数组[1,5,6,7,9,2,4,8,10,13,14],分界处n=5,样例输出:[1,2,4,5,6,7,8,9,10,13,14] 一种实现方式如下(
阅读全文
摘要:题目描述:求一个字符串的最大回文前缀长度。回文是指正反方向读起来都是一样的字符串,比如“abcdcba”就是一个回文。输入:多行字符串。输出:最大回文前缀的长度。 样例输入:abcabcdabcdcabcdcbabcdcba 样例输出:11117 注意本题是求回文前缀的长度,需要从字符串的首部开始,
阅读全文
摘要:问题描述:给定一行整数,其中最后一个数字为其个数,在O(n)的时间里求该整数列中存在的最大差值,并且只能拿右边的数减去左边的数。 例如:10 -5 3 3 , 最大差值为 8 = 3 - (-5); 10 5 2 , 最大差值为 0 = 10 - 10 或者 5 - 5. 实现代码如下(Java版)
阅读全文
摘要:如题,如下代码输出结果是什么? 输出结果: 困惑: 标记1的输出结果有点疑惑。 解释:
阅读全文
摘要:如题,如何计算两个用字符串表示的数字的乘积(包括不带小数位与带小数位情形)呢?对于两个整形数字的乘积还好,若两个数字中包含小数,计算就稍微复杂一些了。 计算两个整形的乘积的过程:先把两个数字的各位保存在int数组或char数组中,然后再申请一个有该两个数组长度和的数组保存各位相乘的结果,同时还要注意
阅读全文
摘要:直接使用现有的基本数据类型(int,long)等保存大数的阶乘结果显然是不行的,因为不论是int,还是long类型,都只能保存一定的数字范围的数,而阶乘的结果可能非常巨大,基本数据类型显然是无法胜任的。那如何计算较大数字的阶乘呢?可以使用数组来保存阶乘的结果,申请一个较大长度的数组便可实现保存较大数
阅读全文
摘要:接着上一篇“使用两个队列模拟一个栈”,这里该如何使用两个栈模拟一个队列呢?具体实现如下:
阅读全文
摘要:准备笔试,在看相关知识,看到这个问题,如何使用两个队列模拟一个栈,在参考了相关知识下,实现了代码如下:
阅读全文
摘要:选择排序算法是另外一种简单的排序算法,该算法的时间复杂度最好时为O(n^2),最差时为O(n^2),空间复杂度为O(1)。另外该算法是不稳定的,在序列较小时效果较好。 该算法的基本思想是:不断地取出待排序序列的最小值,若按从小到大排序,就不断地将每次的最小值放在序列前端,直到待排序序列的元素比较完为
阅读全文
摘要:插入排序是排序算法中一种经典的排序算法,该算法的时间复杂度最好时为O(n),最差时为O(n^2),空间复杂度为O(1),该算法也是一种稳定的排序算法。该种算法较适合大部分已有序时的排序问题。相比较而言,冒泡排序则更适合较小的序列排序。 该排序算法的思想是:不断地将当前数字插入到一个有序序列中,直到最
阅读全文
摘要:如何在时间复杂度为O(n)内找出数组中第二大的数字? 通过设置两个变量,一个保存最大值,一个保存第二大值,通过在找最大值的过程中,原来的最大值逐渐变为第二大值。一种实现代码如下(Java版):
阅读全文
摘要:冒泡排序算法是一种较为简单的并且稳定的排序算法,该算法的时间复杂度最好为O(n),最差时为O(n^2),需要的空间复杂度为O(1)。 这里的算法稳定性是指 经过排序后,各元素仍然能保持它们在排序之前的相对次序,就称该算法是稳定的,反之,则为不稳定的。 例如,一组数排序前是a1,a2,a3,a4,a5
阅读全文
摘要:给定一个整数数组,求取该数组的最大子数组之和,代码如下(部分来源其他博客,如有侵权,请私信):
阅读全文

浙公网安备 33010602011771号