例如,两个含有n个元素的有序(非降序)整形数组a和b(数组a和b中都没有重复元素),求出其共同元素。a[]={0,1,2,3,4};B[]={1,3,5,7,9};那么它们的交集为{1,3}。计算数组交集可以采用很多种方法,但数组的相对大小一般会影响算法的效率,所以需要根据两个数组的相对大小来确定采用的方法。(1)对于两个数组长度相当的情况,一般可以采取以下3种方法。方法一:采用二路归并来遍历两个数组。(这个名字好霸气,有木有武功招数的赶脚)设两个数组分别为array1[n1]和array2[n2],分别以i、j从头开始遍历两个数组。在遍历过程中,如果当前遍历位置的array1[i]与arra Read More
posted @ 2014-03-06 22:09 源子陌 Views(2724) Comments(0) Diggs(0) Edit
思路分析:二分查找法也称为折半查找法,它的思想是每次都与序列的中间元素进行比较。二分查找的一个前提条件是数组是有序的,假设数组array为递增序列,findData为要查找的数,n为数组长度,首先将n个元素分成个数大致相同的两半,取array[n/2]与将要查找的值findData进行比较,如果findData等于array[n/2],则找到findData,算法终止;如果findDataarray[n/2],则只需要在数组array的右半部分继续搜索即可。这个“左半部分”、“右半部分”的确定,都需要两个参数:开始标记与结束标记,比如初始状态时,开始标记为下标0,结束标记为数组长度-1,序列的 Read More
posted @ 2014-03-06 20:00 源子陌 Views(2891) Comments(0) Diggs(0) Edit
思路分析:递归嘛之前数组求和已经见识到了,就是自己调用自己嘛。但是,这里一定要注意一点,凡是要求用“递归算法”的,你在递归之前一定要先分类讨论,判断一下当前条件是否允许递归,比如一个数组长度就是1,你用递归去判断它里面的某两个元素的大小,这就要出Bug了。还有既然递归的目的是判断,那要写的递归函数就是个bool类型的。最最重要的是,数组操作一定要注意下标越界问题,数组下标只能在0到数组长度减1之间的。代码如下:// 1314.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"void Judge(int *a, int n){ if (n = Read More
posted @ 2014-03-06 11:09 源子陌 Views(3864) Comments(0) Diggs(0) Edit
思路分析:二维数组在内存中默认是按照行存储的,比如一个二维数组{{1,2,3,},{4,5,6}},它在内存中存储的顺序就是1、2、3、4、5、6,也就是说,对于这6个数组元素,按照从0到5给它们编号的话,从它们的编号都能推出它们在二维数组中的行号和列号,比如行号即为序号对列数的整数商,列号则为序号对列数取余。所以别说二维数组了,其它维数组也能用一个for循环打印出来。代码如下:// 1312.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #define MAXX 2#define MAXY 3void printArr Read More
posted @ 2014-03-06 10:23 源子陌 Views(5132) Comments(0) Diggs(0) Edit
思路如下:给定一个含有n个元素的整型数组a,求a中所有元素的和。问题的难点在于如何使用递归上。如果使用递归,则需要考虑如何进行递归执行的开始以及终止条件,首先如果数组元素个数为0,那么和为0。同时,如果数组元素个数为n,那么先求出前n-1个元素之和,再加上a[n-1]即可。此时可以完成递归功能。总之,递归就是在某个函数的执行过程中首先判断它的终止条件参数,终止条件参数满足终止条件则执行完毕,终止条件参数不满足终止条件则调用它自身执行某项运算,比如这里求和就是执行加法。凡是递归一定都有一个参数作为终止条件,比如这里是数组中未加入求和队列的元素个数,初始为数组长度。因为终止条件参数的初始值为数组长 Read More
posted @ 2014-03-06 00:21 源子陌 Views(6488) Comments(0) Diggs(1) Edit