2015百度笔试题(算法)

来源:互联网 发布:中国最良心的网游知乎 编辑:程序博客网 时间:2024/05/16 06:53

有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现

#include<iostream>using namespace std;double searchmin(double*, int, int);int main(){double L[] = {-10, -5,1,3,9};double minL = searchmin(L, 0, sizeof(L)/8-1);cout << "min=" << abs(minL )<< endl;return 1;}double searchmin(double* arr, int low, int high){if (arr[high] <= 0)return -arr[high];if (arr[low] >= 0)return arr[low];int mid = (low + high) / 2;if (arr[mid] * arr[mid - 1] <= 0)return abs(arr[mid]) > abs(arr[mid - 1]) ? arr[mid - 1] : arr[mid];if (arr[mid] * arr[mid +1] <= 0)return abs(arr[mid]) > abs(arr[mid +1]) ? arr[mid + 1] : arr[mid];if (arr[mid] > 0)return searchmin(arr, low, mid - 1);elsereturn searchmin(arr, mid + 1, high);}


0 0
原创粉丝点击