摘要: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2} 阅读全文
posted @ 2016-08-27 22:03 樱圃 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。 思路1:针对这个 阅读全文
posted @ 2016-08-27 21:56 樱圃 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 思路:如果有一个数组的出现次数超过一半,则必然有连着的两个相等的数。如果我们将连着的不相 阅读全文
posted @ 2016-08-27 21:32 樱圃 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路:an=an/2*an/2(n为偶数) = a(n-1)/2*a(n-1)/2*a(n为奇数) 根据这个公式,我们可以把这个当成一个递推公式,如an与a(n/2)的关系(an/2与a( 阅读全文
posted @ 2016-08-27 19:52 樱圃 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 知识点:把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中最右边一个1变成0,可以将整数的二进制中最右边(不是0的位置)的1消掉。所以,有多少个1,循环就执行几次;反过来说,循环执行几次,就有几个1. 阅读全文
posted @ 2016-08-27 17:34 樱圃 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 第一种思路是:从数组的第 阅读全文
posted @ 2016-08-27 17:29 樱圃 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 思路:一个栈如stack1始终是用来存储数据,当另外一个栈不为空时直接从stack2中弹出,若为空时,则将stack1中的值全部压入到stack2中,再将stack2中元素的值取出即可。 阅读全文
posted @ 2016-08-27 17:02 樱圃 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 重建二叉树,由前序遍历和中序遍历创建二叉树。这个可以递归实现。先找到根节点,然后找到前序遍历的数组和中序遍历的数组,即可实现。 阅读全文
posted @ 2016-08-27 16:56 樱圃 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 建立最大的k个数,可以通过快速排序来实现,也可以通过堆排序来实现。我们来看堆排序的实现过程。 其中,也是有两种思路:第一种思路是:把数组里的所有的数建堆(O(nlogn)),然后交换k次,通过堆排序实现。(klogn) 时间复杂度是:O((n+k)logn) = O(nlogn) 第二种思路是:先用 阅读全文
posted @ 2016-08-27 16:34 樱圃 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 堆排序的时间复杂度是:o(nlogn); 第一种思路:在所有的循环中,循环的第一次是建堆,剩余的是调整堆。 第二种思路是:先建堆,然后再调整堆。(建立一个调整堆函数 ) 阅读全文
posted @ 2016-08-27 16:02 樱圃 阅读(141) 评论(0) 推荐(0) 编辑