一条简单算法题的几种不同的基础算法实现
1到100的其中99个数字放入一个数组a[99],写代码找出不在数组中的那个数字。
方法一 穷举法搜索
int findMissingNumber1(int digits[99])
{
for(i=1;i++;i<=100)
{
for(j=0;j<99;j++)
{
if(digits[j] == i)
break;
}
if(j == 99)
return i;
}
}
方法二 扫描法打点
int findMissingNumber2(int digits[99])
{
bool flag[100] = {false};
for(i=0;i<99;i++)
{
flag[digits[i]] = true;
}
for(i=0;i<100;i++)
{
if(!flag[i])
{
return i;
}
}
}
方法三 二分法分治排序后再线性查找
int findMissingNumber3(int digits[99])
{
qsort(digits,0,98);
for(i=0;i<99;i++)
{
if((i + 1)!= digits[i])
break;
}
return i + 1;
}
void qsort(int * a, plow, phigh)
{
int key = a[low];
int low = plow;
int high = phigh;
while(low < high)
{
while(low < high && a[high] >= key) high--;
a[low] = a[high];
while(low < high && a[low] <= key) low++;
a[high] = a[low];
}
a[low] = key;
qsort(a,plow,low - 1);
qsort(a,low + 1, phigh);
}
方法四 数学公式法(等差数列求和后相减)
int findMissingNumber4(int digits[99])
{
int sum1 = 0, sum2 = ((1+100)*100)/2;
for(i=0;i<99;i++)
{
sum1 = sum1 + digits[i];
}
return sum2 - sum1;
}
posted on 2012-09-28 14:26 Jordan_Fei 阅读(198) 评论(0) 编辑 收藏 举报