随笔分类 - 编程珠玑
摘要:今天在看编程珠玑第八章关于求连续子向量中的最大和问题时,碰到了如下问题,见习题8.7第五题:如何允许算法访问cumarr[-1]。如何使用C语言处理该问题? 以前在其他编程书中也遇到过此类问题,但每次也没仔细想过如何设置c[-1]=0的问题。这次准备好好了解一下。以前不知道数组的下标还可是负数。这次是长见识了。 那么如何用c[-1]访问另一个数组的第一个元素呢?其实很简单 利用指针即可。int *c;c=arr+1;这样c[-1]指向的就是arr[0],不管怎么样 ,是明白了有c[-1]这回事。
阅读全文
摘要:上一节末尾提到了一个问题,在顺序数组中找到t值第一次出现的位置。其实这也是一种二分搜索的变形。思路如下:我仍然使用l和u作为数组的边界值,t就包含在l和u指示的数组范围中。但不变关系式变为x[l]<t<=x[u]和l<u,此时,我们假设n>=0,x[-1]<t以及 x[n]>=t(程序中并没有这两个元素)。二分搜索的代码如下 1 int binarySearch(int a[],int n,int t)//n为a数组的长度,t为寻找的元素 2 { 3 4 if(n<=0) 5 { 6 return -1; 7 ...
阅读全文
摘要:编程珠玑中提到了 二分搜索,这也是各大公司面试和笔试的常考题,乍看一下此题很简单,用递归和循环都可以做出来,但是却隐藏了对程序员编写代码能力的考察,以及考虑事情范围的全面性。下面看一下二分搜索的循环代码 1 int binarySearch(int low , int high,int z,int a[]) 2 { 3 4 if((low>high)||low<0||high<0) 5 { 6 return -1;// 分析输入参数...
阅读全文
摘要:第二章:基本的算法(1) 下面就从编程珠玑的第二章算法讲起,首先请看问题描述:将一个n元一维向量向左旋转i个位置。例如:当n=8时且i=3时,向量abcdefgh旋转为defghabc。简单的代码可以使用一个n元的中间变量在n步内完成工作,下面介绍一些更简便的算法。1:杂技算法: 移动x[0]到临时变量t,然后移动x[i]到x[0],x[2i]到x[i],依次类推(将x中的所有下标对n取模),直到返回到取x[0]值的元素,此时改为从t取值然后终止过程,当i为3时n为12时,元素安如下顺序进行移动:(此代码用到了求最大公约数的算法) 1 #include<iostream> 2 3
阅读全文

浙公网安备 33010602011771号