面试题31:数组中的最小绝对值
来源:互联网 发布:淘宝宝马摩托车 编辑:程序博客网 时间:2024/05/16 15:07
题目:给出一个递增数组,有正数或负数,找到其中绝对值最小的数
例如:数组{-8,-5,-1,2, 4},绝对值最小的数是-1.
思路:二分查找0
代码:
#include "stdafx.h"#include <iostream>#include <assert.h>using namespace std;//给出一个递增数组,有正数或负数,找到其中绝对值最小的数//思路:利用二分查找0int MinAbsNum(int nArr[], int nLength){ assert(nArr != NULL && nLength > 0);int nLow = 0;int nHigh = nLength - 1;int nMid = 0;while (nLow <= nHigh){nMid = nLow + ((nHigh - nLow) >> 1);if (nArr[nMid] > 0){nHigh = nMid - 1;}else if (nArr[nMid] < 0){nLow = nMid + 1;}else{return 0;}}if (nLow >=0 && nLow <nLength && nHigh >=0 && nHigh < nLength){int nLowAbs = abs(nArr[nLow]);int nhighAbs = abs(nArr[nHigh]);if (nLowAbs < nhighAbs){return nArr[nLow];}else{return nArr[nHigh];}}else if (nLow >=0 && nLow <nLength){ return nArr[nLow];}else {return nArr[nHigh];}}int _tmain(int argc, _TCHAR* argv[]){int nArr1[5] = {-5, -3, -1, 2, 8};//nLow、nHigh都没有越界cout << MinAbsNum(nArr1, 5) << endl;int nArr2[5] = {-1, -1, -1, -1, -1};//nLow越界cout << MinAbsNum(nArr2, 5) << endl;int nArr3[5] = {2, 2, 2, 2, 2};//nHigh越界cout << MinAbsNum(nArr3, 5) << endl;int nArr4[5] = {-5, -3, -1, 0, 8};cout << MinAbsNum(nArr4, 5) << endl; system("pause");return 0;}运行结果:
- 面试题31:数组中的最小绝对值
- [经典面试题]排序数组中绝对值最小元素
- 面试题81:有序数组中绝对值最小的元素
- [面试题] 求数组两两之差绝对值最小的值
- 【转】[面试题] 求数组两两之差绝对值最小的值
- 百度面试题:求一个已排序的数组中绝对值最小的元素
- 百度面试题:求一个已排序的数组中绝对值最小的元素
- 百度面试题:从已排序的数组中求绝对值最小的元素
- 百度面试题:求绝对值最小的数
- 百度面试题:求绝对值最小的数
- 百度面试题:求绝对值最小的数
- 百度面试题:求绝对值最小的数
- 百度面试题:求绝对值最小的数
- 面试题8:旋转数组中的最小数字
- 剑指offer-面试题8:旋转数组中的最小数字
- 【剑指offer】面试题8:旋转数组中的最小数字
- 有序数组最小绝对值。
- 一道面试题:有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。
- 简单易懂 经典按键检测程序(包含长按功能)
- MySql按日期进行统计(前一天、本周、某一天)
- Gridview自定义分页
- 数据库以往操作
- 数据库语句——Sequence
- 面试题31:数组中的最小绝对值
- modprobe:FATAL:module "xxx" not found
- C# Enum设计和使用的相关技巧
- 如何在Android手机中开发QQ账户登陆功能的应用
- powercenter 工作流报错
- sql解惑之里程碑 谜题25(行转列)
- JAVA学习五:面向对象
- wifi笔记_scan
- ubuntu使用中一系列问题解决........