您的位置:首页 > 其它

求排序数组的元素的绝对值的最小值

2014-10-24 14:15 696 查看
原文:http://blog.csdn.net/dengsi23/article/details/8039991
题目:一个有序数组(从小到大排列),数组中的数据有正有负,求这个数组中的最小绝对值。

思路:一个简单的思路,就是一次性遍历数组,求出数组的元素的绝对值的最小值,这样的时间复杂度为O(n)。但是,这样就浪费了题目的一个条件:数组是已经排好序的。所以,需要对原来的题目进行转换。考虑到数组有序,则元素绝对值的最小值为数组中最大负数的绝对值与最小非负数的绝对值的最小值。于是,题目事实上是去查找原数组中负数集合中的最大值。而在一个有序序列中进行查找,则优先考虑二分法,时间复杂度为O(log n)。

源码实现:

[cpp] view
plaincopy

int GetMinAbs(int* arr, int len)

{

int low, mid, high;

low = 0;

high = len - 1;

mid = (low + high) / 2;

while (low <= high)

{

if (mid == len - 1)

{

break;

}

else

{

int temp = arr[mid] * arr[mid + 1];

if (temp <= 0)

{

return abs(arr[mid]) < abs(arr[mid + 1]) ? abs(arr[mid]) : abs(arr[mid + 1]);

}

else

{

if (arr[mid] > 0)

{

high = mid - 1;

}

else

{

low = mid + 1;

}

}



mid = (low + high) / 2;

}

}



if (arr[0] > 0)

{

return abs(arr[0]);

}

else

{

return abs(arr[len - 1]);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐