算法
文章平均质量分 64
风吹得好舒服
发现更大的世界~
展开
-
二路归并排序c++实现
#include #include "stdio.h"using namespace std;//将前后有序的r归并到r1void Merge(int *r,int *r1,int s,int m,int t){ int i=s; int j=m+1; int k=s; while(i<=m&&j<=t) { //将前后两个有序的原创 2013-10-08 22:32:11 · 1014 阅读 · 0 评论 -
读程序员编程艺术第七章---求最大子数组和
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。看到这个问题首先容易想到是蛮力法和递归。蛮力法在这儿就不介绍了,时间复杂度为o(n*n*n)。递归的方法的时间为o(nlogn)。我们知道子数组和最大的序列不是出现在左边就是出现右边,或者是左右都有一部分。不外乎这三种情况,故我们可原创 2014-03-25 21:47:02 · 771 阅读 · 0 评论 -
快速算法实现----挖坑填数
快速排序作为时间复杂度为o(nlogn)的算法,在实际中经常用到。下面简单的讲解一下快速排序算法的实现思路。看到网上http://www.cnblogs.com/morewindows/archive/2011/08/13/2137415.html这位大牛的思路写的非常好。挖坑填数,非常形象。下面简单的介绍一下。快速排序用到时分治法的思想。主要可以分为以下的三步。1、选定一个数作为基数原创 2014-04-05 21:11:03 · 1622 阅读 · 0 评论 -
冒泡排序及其改进
冒泡排序最为最经典的算法,虽然原创 2014-04-19 00:49:35 · 634 阅读 · 0 评论 -
读程序员编程艺术第二章---字符串包含问题(二)
上篇中谈到可以通过快速排序将字符串的包含问题的算法时间复杂度优化至O(nlogn)+O(mlogm)+O(m+n),那么还有没有更好的算法时间复杂度呢?可以采用计数排序的方法,排序的时间复杂度为O(m+n),线性扫描的时间复杂度为O(m+n)。故总的时间复杂度为:O(m+n)+O(m+n)=O(m+n)。但是此时的空间复杂度为:O(m+n)。对于上述思路,编写代码如下:#inclu原创 2014-03-20 13:27:38 · 711 阅读 · 0 评论 -
最大连续乘积字串
首先解释一下原创 2014-05-01 20:57:16 · 682 阅读 · 0 评论 -
读程序员编程艺术第二章---字符串包含问题
字符串包含问题:即一个字符串是否包含另一个字符串。这个问题虽然比较简单,但是想要优化轮询的时间复杂度却不是那么的简单。最常见的方法就是针对一个字符串的字符,一一与另一个字符串中的字符相比较,看他们是否都在其中。即方法一:O(n*m)的轮询方法,由于这种方法比较简单,代码我就不贴了。 方法二:基于O(mlogm)+O(nlogn)+O(m+n)的排序方法 的轮询,下面重点介绍这原创 2014-03-19 22:01:52 · 781 阅读 · 0 评论 -
读程序员编程艺术第一章---左旋字符串(三)
STL中的循环移位法用到了gcd原理。gcd原理的实现是简单的欧几里得算法又称辗转相除法,这里就不在赘述了。对于数组的循环移位,可以采用的方法一共有四种。1、将数组拷贝复制到相同长度的数组之中,改变顺序,并拷贝回原来的数组。2、先交换前面的能够交换的部分,在处理尾巴。如上一遍中的指针翻转法就是这么做的。3、分组交换。4、所有序号为(j+i*m)%n(j表示循环的起始链位置,i为原创 2014-03-18 10:19:53 · 563 阅读 · 0 评论 -
读程序员编程艺术第一章---左旋字符串
问题描述:把字符串的前几个字符移到字符串后面叫做字符串的左旋操作。例如将“abcdef”做左旋转2位就可以得到“cdefab”。要求对长度为n的字符串操作的时间复杂度为o(n),空间复杂度为o(1);思路一:#include "stdafx.h"#include"stdio.h"//左移一个字符void leftshiftone(char *s,int n){ c原创 2014-03-15 23:53:46 · 643 阅读 · 0 评论 -
读程序员编程艺术第一章---左旋字符串(二)
上一遍介绍了左旋字符串的第一种方法,暴力移位法。今天我们通过指针翻转法来实现左旋字符串。下面看一个例子。字符串“abcdefghijk”通过左移得到"defghijkabc"。我们可以通过两步来实现。首先定义两个指针p1,p2指向要交换的两个字符,如p1指向a,p2指向d,将p1与p2指向的字符进行交换,然后p1++,p2++。这样反复重复,知道p2指向末尾的字符。这样可以得到字符串defghij原创 2014-03-16 20:05:20 · 645 阅读 · 0 评论 -
关于今天参加学校ACM比赛的感想
今天参加了学校举办的ACM比赛,有一些感触。总结如下:1、ACM这种东西必须要非常的沉的下来心的东西,三天打鱼两天筛网肯定是不行的。只看到别人的成绩,却看不到别人的努力,别人之所以是“大牛”是有理由的,看到外校的AK所有的题目,除了崇拜之外还是崇拜,但是我也不会停下,会努力让自己变得更强。6道题的差距也是能够缩短的。2、一定要努力提高自己的 代码能力,坚持学习算法,可能最后原创 2013-12-01 23:23:40 · 869 阅读 · 0 评论