面试题81:有序数组中绝对值最小的元素
来源:互联网 发布:蜂巢网络与无人机战争 编辑:程序博客网 时间:2024/05/16 06:18
题目:
给定一个有序整数序列(非递减序),可能包含负数,找出其中绝对值最小的元素,比如给定序列-5、-3、-1、2、8则返回1。
思路:
由于是有序数组,而且是搜索问题,所以首先考虑二分查找法。
对于每个子数组,可以考虑一下几种情况:
1)如果给定的序列中所有的数都是正数,那么数组的第一个元素就是结果。
2)如果给定的序列中所有的数都是负数,那么数组的最后一个元素就是结果。
3)如果给定的序列中既有正数,又有负数,那么绝对值的最小值一定出现在正数和负数的分界处。
#include <iostream>#include <algorithm>using namespace std;const int N = 100;const int poolN = 3;bool SameSign(int m, int n){if ((m >> 31) == (n >> 31)) return true;return false;}int MiniNumAbsoluteValue(int *arr, int n){int low = 0;int high = n - 1;if (SameSign(arr[low], arr[high]))return arr[low] >= 0 ? arr[low] : arr[high];while (low < high){if (low + 1 == high) return (abs(arr[low] < abs(arr[high])) ? arr[low] : arr[high]);int mid = (low + high) >> 1;if (SameSign(arr[low], arr[mid]))//不用担心low到high全为正的情况,如果这样,则所有的都为正了{low = mid;continue;}if (SameSign(arr[mid], arr[high])){high = mid;continue;}}return arr[low];}int main(){int arr[] = { -5, -3, -1, 2, 8,9 };cout << MiniNumAbsoluteValue(arr, 6) << endl;return 0;}
0 0
- 面试题81:有序数组中绝对值最小的元素
- [经典面试题]排序数组中绝对值最小元素
- 找出有序数组中绝对值最小的元素
- 找出有序数组中绝对值最小的元素
- 百度面试题:求一个已排序的数组中绝对值最小的元素
- 百度面试题:求一个已排序的数组中绝对值最小的元素
- 百度面试题:从已排序的数组中求绝对值最小的元素
- 求数组中绝对值最小的元素
- 找出有序数组中绝对值最小的数
- 有序数组最小绝对值。
- 面试题31:数组中的最小绝对值
- 求升序数组中绝对值最小的元素
- 寻找有序数组的反转数组中最小的元素
- 程序员面试题精选(43):数组中连续元素相加和最小的元素序列
- 数据结构面试题总结3——数组:求数组中两个元素的最小距离
- [面试题] 求数组两两之差绝对值最小的值
- 【转】[面试题] 求数组两两之差绝对值最小的值
- (百度面试题目)对升序数组,求数组中绝对值最小的元素
- Ehcache(08)——可阻塞的Cache——BlockingCache
- C++虚析构函数的作用
- frameset
- 使用九宫格来调整图片
- Ubuntu14.04编译Android FFmpeg详细教程
- 面试题81:有序数组中绝对值最小的元素
- Ehcache(09)——缓存Web页面
- hdu5412 CRB and Queries (整体二分)
- c,c++语言中 i++ 与 ++i
- Android AsyncHttpClient 的简单用法
- Spring使用Cache、整合Ehcache
- STM32系列第31篇--MPU6050六轴传感器
- Qt 消息基础相关_03
- 关于OPencv里仿射变化和透射变换的理解和理论