ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> C/C++教程 >> 华为OJ在字符串中找出连续最大的数字串,本机运行正确,系统判断时间超限的错误解决

齐发国际登录

来源:网络整理     时间:2015-02-08     关键词:

本篇文章主要介绍了"华为OJ在字符串中找出连续最大的数字串,本机运行正确,系统判断时间超限的错误解决",对于C/C++教程感齐发国际游戏的同学可以参考一下: 做华为OJ的一道题目,碰到问题花了很长时间,终于解决了非常开心记录一下。我的程序如下,在本地执行正确的,但传上去就会判断时间超限,解决后面会说:unsigned...

做华为OJ的一道题目,碰到问题花了很长时间,终于解决了非常开心记录一下。我的程序如下,在本地执行正确的,但传上去就会判断时间超限,解决后面会说:

unsigned int Continumax(char** pOutputstr,  char* intputstr)
{
   int lengthtemp=0,length=0,flag=0,i=0; 
   char * tempstr,* longeststr;
   *pOutputstr=(char*)malloc(100*sizeof(char));
   longeststr =intputstr;
   if((*intputstr=='\0')||(intputstr==NULL)){
     **pOutputstr='\0';
     return 0;  
   }
   do{
      if((*intputstr>='0') && (*intputstr<='9')){
         if(flag==0){
           flag=1;
           tempstr=intputstr;
         }
         lengthtemp++;
      }
      else{
           flag=0;
           if(lengthtemp>=length){
              longeststr=tempstr;
              length=lengthtemp;
           }
            lengthtemp=0;
      }
      if(*intputstr=='\0')break;
      intputstr++;
   }while(1);
   for(i=0;i<length;i++){
       *(*pOutputstr+i)=*(longeststr+i);
   }
   *(*pOutputstr+i)='\0';

   return length;
}

另一个正确的解法如下:

unsigned int Continumax(char** pOutputstr,  char* intputstr)
{
   int lengthtemp=0,length=0,flag=0,i=0;
   char * tempstr,* longeststr;
   *pOutputstr=(char*)malloc(100*sizeof(char));
   longeststr =intputstr;
   if((*intputstr=='\0')||(intputstr==NULL)){
	  **pOutputstr='\0';
	  return 0;  
   }
   while(*intputstr!='\0'){
	   if((*intputstr>='0') && (*intputstr<='9')){
		   tempstr=intputstr;
		   lengthtemp++;	   
		   intputstr++;
		   while((*intputstr>='0') && (*intputstr<='9')){
			   lengthtemp++;
			   intputstr++;
		   }
		   if(lengthtemp>=length){
				   longeststr=tempstr;
				   length=lengthtemp;
		   }
		   lengthtemp=0;
	   }
	   if(*intputstr=='\0')break;
	   intputstr++;
   }
   for(i=0;i<length;i++){
       *(*pOutputstr+i)=*(longeststr+i);
   }
   *(*pOutputstr+i)='\0';
   return length;
}


程序在自己机子上跑的时候,测了好多测试用例都是没问题的,传上去就说时间超限。但是怎么看都不可能是因为程序本身时间跑的太长的问题,系统给的是10秒钟,这么点程序根本不可能跑到这个时间,网上查了一大堆资料,基本都说是会有死循环,或者是算法太复杂,这些可能性都逐一排除了,花了我一天多的时间,后来用第二种方法上传正确了以后,更纳闷了,一直想不通第一种方法有什么问题,两种的解决思想其实没有什么大的差别,实现也没什么不同。费了九牛二虎之力,最后发现是因为第一种方法会出现字符串指针tempstr在没有经过初始化的时候就赋给longeststr的情况,可能tempstr本身有特殊的值,这样就会被系统拒绝执行,因此出现问题,只需要在一开始对两个变量进行初始化

char * tempstr=NULL,* longeststr=NULL;

后一种方法虽然同样没有初始化,但是很巧妙的躲过了这个陷阱,因为只有在tempstr被赋值了的情况下,才会把tempstr赋值longeststr,总算发现了二者的区别。

这次的经历实在是坎坷,两段代码比对了几十遍,始终觉得没有什么差别, 万万没想到是初始化的问题,看来还是需要养成良好的习惯,引以为戒。

以上就介绍了华为OJ在字符串中找出连续最大的数字串,本机运行正确,系统判断时间超限的错误解决,包括了方面的内容,希望对C/C++教程有齐发国际游戏的朋友有所帮助。

本文网址链接:http://www.machineofchina.com/article/detail_112028.html

相关图片

相关文章