求一个排序数组中绝对值最小的数
来源:互联网 发布:mac制作windows安装盘 编辑:程序博客网 时间:2024/06/10 07:47
题意描述:给定一个已排好序的数组,求数组中绝对值最小的元素
解题思路一:直接遍历,时间复杂度为O(n),求得数组中绝对值最小的元素
int getMinAbs(int[] num){//当数组只有一个元素的情况直接返回if(num.length == 1)return num[0];//当数组非负时直接返回num[0],当数组非正时直接返回num[num.length-1]if(num[0] >= 0)return num[0];else if(num[num.length-1] <= 0)return num[num.length-1];int min = Math.abs(num[0]);for(int i=1; i<num.length; i++)min = Math.min(min, Math.abs(num[i]));return min;}解题思路二:直接遍历求最小的时间复杂度为O(n),并且也没有用到题目中给定的条件---已排序的数组。因此考虑到二分查找,最小的数应该是最大的负数与最小非负数之间绝对值较小的那个数
int getMinAbs(int[] num) {//当数组只有一个元素的情况直接返回if(num.length == 1)return num[0];//当数组非负时直接返回num[0],当数组非正时直接返回num[num.length-1]if(num[0] >= 0)return num[0];else if(num[num.length-1] <= 0)return num[num.length-1];//当数组有正有负时,返回最大的负数与最小的非负数中较小的那一个int low = 0, high = num.length-1, mid = (low + high)/2;while(low < high){if(num[mid] < 0)low = mid + 1;else if(num[mid] > 0){if(num[mid] * num[mid-1] < 0)return Math.min(Math.abs(num[mid-1]), num[mid]);high = mid - 1;}else return num[mid];mid = (low + high) / 2;}return 0;}
0 0
- 求一个排序数组中绝对值最小的数
- 百度面试题:求一个已排序的数组中绝对值最小的元素
- 求一个已排序的数组中绝对值最小的元素
- 百度面试题:求一个已排序的数组中绝对值最小的元素
- 二分查找的一个题---找出排序数组中绝对值最小的数
- 求数组中绝对值最小的元素
- 求绝对值最小的数
- 求绝对值最小的数
- 求绝对值最小的数
- 求绝对值最小的数
- 百度面试题:从已排序的数组中求绝对值最小的元素
- 求一个已排序旋转数组中的最小的数
- 求一个数的绝对值
- 求一个数的绝对值
- 求一个数的绝对值
- 求一个数的绝对值
- 求升序数组中绝对值最小的元素
- 找出整数数组中两个数差值的绝对值最小
- 自动化测试(一)
- reactjs--父组件调用子组件的内部方法
- IntelliJ IDEA 14.0.2破解注册码文件
- iOS开发编码建议与编程经验
- Android7.0 PowerManagerService(1) 启动过程
- 求一个排序数组中绝对值最小的数
- WKWebview与javascript的交互
- Android应用程序未捕获异常并提示用户发送给开发者
- (三)XML之Schema
- macbook/macOS安装redis
- 关于webpack的用法笔记
- 函数调用过程原理及函数栈帧分析
- Plugin with id com.android.application not found
- 如何将一个目录下的所有文件,合并成一个文件