![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法初体验
文章平均质量分 77
海风林影
彪悍的人生可以没有妹,但是不能没有技术!!
展开
-
排序算法之计数排序
排序是算法与数据结构中最基本的一个模块,而我参加的两次笔试一次面试都在排序算法上有所体现,所以一开始我就从排序算法开始说起。排序算法真是太多了,各种排序怎样去选择呢?主要有几个衡量的指标:时间复杂度:主要有O(n2)、O(nlgn)以及线性的排序算法;空间复杂度:有些排序算法需要额外的辅助空间,而有些则能实现“原地排序”;稳定性:相同的元素在排序之前和排序之后相对位置是否有可能发生变化;适用条件:算法是否有些额外的限制条件。今天我先介绍一种线性的排序算法——计数排序(Counting Sort)。计数排序假原创 2011-05-04 10:51:00 · 1369 阅读 · 0 评论 -
排序算法之基数排序
计数排序的缺点很明显,需要额外的空间C来作为计数数组,虽然时间复杂度为O(n+k),但当输入序列里元素取值很大的时候,如k=O(n2),时,此时时间复杂度已经达到n2数量级了,空间的消耗也是让人无法承受的。这里介绍一种另一种线性排序算法——基数排序,可以应对数值很大的情况。基数排序,即一个数位一个数位地进行排序,平常生活中我们经常使用的一种算法思想:如要对一个日期进行排序,日期中由年、月、日组成的,对于这个问题,我们经常使用的是先比较年份,如果相同再比较月份,如果还相同就比较日。同理,我们比较一组数,也可以原创 2011-05-05 11:42:00 · 1811 阅读 · 0 评论 -
三种算法求解一个数组的子数组最大和
前阵子去淘宝的暑期实习生去笔试,遇到这样一个题:要求一个数组连续下标和的最大值,数组的元素可正、可负、可为零,例如-2,5,3,-6,4,-8,6将返回8。这题嘛,是很经典的一道公司的笔试或者面试题了,也有各种解法,从算法分析上,时间复杂度也有很大差别,下面我就给出三种不同的解法,看完之后,你应该就知道如果你面试的时候遇到这样的题,你应该用哪种方法最能让考官满意。方法一:暴力枚举法此种方法最简单,我想应该也是每个人拿到题目想到的第一种解法了,学过一点编程的人都应该能编出此类程序。记sum[i..j]为数组中原创 2011-05-08 01:02:00 · 3121 阅读 · 1 评论 -
经典题:一个整数分解为连续正整数之和
为了找份暑期实习生的工作,今天去某公司面试。很喜欢这样的公司,首先不问出身、不问爱好,直接给你一台电脑,几道编程题目,让你写程序。其中有道题目是将一个整数分解为连续正整数之和,如15可以分解为:15 = 1 + 2 + 3 + 4 + 515 = 4 + 5 + 615 = 7 + 8这道题,我用最死板的方法给编出来了。输入数n,设置起始位置i,再遍历连续正整数的长度k,由公式原创 2012-05-22 22:37:19 · 3223 阅读 · 0 评论