一条简单算法题的几种不同的基础算法实现

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编辑  收藏  举报

导航