【一些题】剑指offer:连续子数组最大和

来源:互联网 发布:出租车司机 韩国 知乎 编辑:程序博客网 时间:2024/05/17 09:15

方法一程序

int MaxSubSequence(int *num, int length){if(!num || length <=0){ValidInput = false;return 0;}int start = 0, end = 0;int biggest = num[0];int currentSum = num[0];for(int i = 1; i < length; ++i){currentSum += num[i];if(currentSum < num[i]){//更换起点,因为前面的和加到当前一个数,比当前的数还要小,说明前面的子数组不需要start = i;end = i;currentSum = num[i];}else if(currentSum >= biggest){//如果加上当前数后的和比最大和要大,则将当前元素包括进子数组中end = i;biggest = currentSum;}}ValidInput = true;return biggest;}bool ValidInput = true;int main(){int num[] = {1,-2,3,10,-4,7,2,-5};int result = MaxSubSequence(num, 8);cout << result << endl;system("pause"); return 0;}


思考:

——》对于方法一,bool ValidInput = true;要放在main函数外部(也是任何函数的外部),作为一个全局变量,这样在MaxSubSequence函数中才可以使用标识符ValidInput;

——》如果我们尝试把bool ValidInput = true;放在了main内部,编译不通过,在MaxSubSequence函数使用ValidInput处会报“编译错误”
  为了解决这个编译错误,我们在MaxSubSequence函数内部写上extern bool ValidInput,这样编译错误解决,但是还是无法成功生成可执行文件,原因是又会出现链接错误,原因是因为无法找到这个具有外部连接的标识符的定义(虽然在main中有定义,但却是局部变量)

——》这个例子可以作为http://blog.csdn.net/tong_xin2010/article/details/39778137 的材料来思考static和extern以及外部和内部连接

0 0
原创粉丝点击