面试程序题
1.有一个整数数组,请求出两两之差的绝对值最小的值,只要得出最小值即可,不需要求出是哪两个数。
思路一:遍历所有的数据,求出两两之差的绝对值,此方法最暴力
int
Min_Abs(int a[],int N)
{
int min_abs = abs(a[0]);
int temp;
int i ,j ;
for( i = 0; i<N;++i)
{
for( j = i+1 ;j < N;++j)
{
temp = abs(a[i]-a[j]);
if( min_abs > temp)min_abs =
temp;
}
}
return min_abs;
}
思路二:排序,然后再求出相邻两数的绝对值比较
void
Q_sort(int a[],int num)
{ int
i = 0;
int j = num - 1;
int k =
a[0];
if (num>1) {//重复的判断条件,如果长度小于2,则不需排序
while (i != j)
{
for (; i<j; j–)
{
m++;
if (a[j]<k)
{
a[i] = a[j];
n++; break;
}
}
for (; i<j; i++)
{
m++;
if
(a[i]>k)
{ a[j]
= a[i]; a[j] = a[i]; a[j] = a[i]; break;
}
}
a[i] = k;
}
Q_sort(a, i);
Q_sort(a+i+1, num-i-1);
}
这种算法的复杂度小一点。
2.写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者怎样只用4行代码编写一个从字符串到长整型的函数?)
long
strtoint(char* str, int len) {
if(len > 1) {
return str[0]==’-’ ?
strtoint(str, len-1)*10-(str[len-1]-‘0’) :
strtoint(str, len-1)*10+str[len-1]-‘0’;
} else {
return str[0]==’-’ ? -1/10 :
str[0]-‘0’;
}
}
void
Findx(char *str )
{
int i=0,k = 0,m= 0,num[10];
while(str[i] !=’\0’)
{
if((str[i]>=‘0’)&&(str[i]<=‘9’))
{
m =
i;
while(str[i]>=‘0’&&str[i]<=‘9’) i++;
num[k] = atoi( &str[m] );
k++;
}
i++;
}
}