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

方法一程序

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.youkuaiyun.com/tong_xin2010/article/details/39778137 的材料来思考static和extern以及外部和内部连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值