94.微软笔试题 求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大: 如果没有符合条件的就输出 格式: 输入[1,3,0,5,-1,6] 输出[-1,1,3,5] 要求时间复杂度,空间复杂度尽量小
void main()
{
int a[]={1 ,3 ,0 ,5, -1, 6};
int i ,j ,k,len, m,n,tmp,t;
len = sizeof(a)/sizeof(int);
for(i =0; i<len-1 ;i++) //从小大的排序
{
for(j =i+1 ; j<len ; j++)
{
if(a[j]<a[i])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
for(i = 0;i<len ;i++)
{
printf("%2d",a[i]);
}
t = a[len-1]-a[0]-1; //数据的最大间隔 为 7
for(i = 1 ;i<=t ; i++)
{
for(j= 0;j<len-1;j++)
{
if( (a[j+1] - a[j]) == i)
{
m = j;
while( (a[m+1] - a[m]) == i)
{
m++;
}
if( (m-j)>=3 )
{
for(k = j ; k<m ;k++)
{
printf("%2d",a[k]);
}
}
}
}
}
}
2.删除串中指定的字符 (做此题时,千万不要开辟新空间,否则面试官可能认为你不适合做嵌入式开发)
例如 字符串str="abcdef";
要删除字符str1="c";
方法
void shanchu(char *str ,char c , int len1 )
{
int i ,j;
for(i = 0 ; i< len1 ; i++)
{
if(str[i] == 'c')
{
strcpy(&str[i] , &str[i+1]);
}
}
}