寻找最小绝对值

2015-02-13  本文已影响29人  lintong

一组有序数(从小到大排列),有负有正,找出绝对值最小值

#include <stdio.h>
#include <vector>
using namespace std;

static int GetMin(const vector<int> &data, int begin, int end){
 //循环到只剩下两个相邻数字,或者整个序列都是相同符号
   if(end - begin == 1 || data[begin] * data[end] >= 0){
      return abs(data[end]) > abs(data[begin]) ? data[begin] : data[end];
   }

   int k = (begin + end) / 2;
   //对异号的序列查找
   if(data[begin] * data[k] > 0){
     return GetMin(data, k, end);
   }
   return GetMin(data, begin, k);
}

int FindAbsMin(const vector<int> &data){
   int m = GetMin(data, 0, data.size() - 1);
   printf("%d", m);
   return m;
}
int main(){
   vector<int> data;
   int Num[] = {-4,-3,-2,-1};
   for(int i = 0; i < sizeof(Num) / sizeof(Num[0]); ++i){
     data.push_back(Num[i]);
   }
   FindAbsMin(data);
 return 0;

}
上一篇 下一篇

猜你喜欢

热点阅读