随笔分类 -  算法初体验

经典题:一个整数分解为连续正整数之和
摘要:为了找份暑期实习生的工作,今天去某公司面试。很喜欢这样的公司,首先不问出身、不问爱好,直接给你一台电脑,几道编程题目,让你写程序。其中有道题目是将一个整数分解为连续正整数之和,如15可以分解为:15 = 1 + 2 + 3 + 4 + 515 = 4 + 5 + 615 = 7 + 8这道题,我用最死板的方法给编出来了。输入数n,设置起始位置i,再遍历连续正整数的长度k,由公式计算出 sum = i + (i+1) + ... + (i+k) = (k+1) * (2*i + k) / 2,判断与n的关系,若相等则打印出从i到i+k这(k+1)个数;若sum>n,则break;伪码如下: 阅读全文

posted @ 2012-05-22 22:33 hazir 阅读(7179) 评论(0) 推荐(1) 编辑

三种算法求解一个数组的子数组最大和
摘要:前阵子去淘宝的暑期实习生去笔试,遇到这样一个题:要求一个数组连续下标和的最大值,数组的元素可正、可负、可为零,例如-2,5,3,-6,4,-8,6将返回8。这题嘛,是很经典的一道公司的笔试或者面试题了,也有各种解法,从算法分析上,时间复杂度也有很大差别,下面我就给出三种不同的解法,看完之后,你应该就知道如果你面试的时候遇到这样的题,你应该用哪种方法最能让考官满意。方法一:暴力枚举法此种方法最简单,我想应该也是每个人拿到题目想到的第一种解法了,学过一点编程的人都应该能编出此类程序。记sum[i..j]为数组中第i个元素到第j个元素的和(其中0<=i<j<=n-1),通过遍历所有 阅读全文

posted @ 2011-05-08 01:02 hazir 阅读(681) 评论(0) 推荐(0) 编辑

排序算法之基数排序
摘要:计数排序的缺点很明显,需要额外的空间C来作为计数数组,虽然时间复杂度为O(n+k),但当输入序列里元素取值很大的时侯,如k=O(n2),时,此时时间复杂度已经达到n2数量级了,空间的消耗也是让人无法承受的。这里介绍一种另一种线性排序算法——基数排序,可以应对数值很大的情况。基数排序,即一个数位一个数位地进行排序,平常生活中我们经常使用的一种算法思想:如要对一个日期进行排序,日期中由年、月、日组成的,对于这个问题,我们经常使用的是先比较年份,如果相同再比较月份,如果还相同就比较日。同理,我们比较一组数,也可以采取这种思想。例如我们使用这种思想对下面四个数进行排序:123、312、245、531, 阅读全文

posted @ 2011-05-05 11:42 hazir 阅读(6747) 评论(0) 推荐(0) 编辑

排序算法之计数排序
摘要:排序是算法与数据结构中最基本的一个模块,而我参加的两次笔试一次面试都在排序算法上有所体现,所以一开始我就从排序算法开始说起。排序算法真是太多了,各种排序怎样去选择呢?主要有几个衡量的指标:时间复杂度:主要有O(n2)、O(nlgn)以及线性的排序算法;空间复杂度:有些排序算法需要额外的辅助空间,而有些则能实现“原地排序”;稳定性:相同的元素在排序之前和排序之后相对位置是否有可能发生变化;适用条件:算法是否有些额外的限制条件。今天我先介绍一种线性的排序算法——计数排序(Counting Sort)。计数排序假设n个输入元素中的每一个都是介于0-k的整数,此处k为某个整数。计数排序顾名思义离不开计 阅读全文

posted @ 2011-05-04 10:51 hazir 阅读(1111) 评论(0) 推荐(0) 编辑

一个代码可以创造一个世界,也可以毁灭一个世界!

点击右上角即可分享
微信分享提示