百度面试题:求绝对值最小的数
有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现
例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。
算法实现的基本思路
找到负数和正数的分界点,如果正好是0就是它了,如果是正数,再和左面相邻的负数绝对值比较,如果是负数,取取绝对值与右面正数比较。还要考虑数组只有正数或负数的情况。
我根据这个思路用Java简单实现了一个算法。大家有更好的实现方法欢迎跟帖
public class MinAbsoluteValue
{private static int getMinAbsoluteValue(int[] source){int index = 0;int result = 0; int startIndex = 0;int endIndex = source.length - 1;// 计算负数和正数的分界点while(true){index = startIndex + (endIndex - startIndex) / 2;result = source[index];if(result==0){return 0;}else if(result > 0){if(index == 0){break;}if(source[index-1] >0)endIndex = index - 1;else if(source[index-1] ==0)return 0;elsebreak;}else{if(index == endIndex)break;if(source[index + 1] < 0)startIndex = index + 1;else if(source[index + 1] == 0)return 0;else break;}}// 根据分界点计算绝对值最小的数if(source[index] > 0){if(index == 0 || source[index] < Math.abs(source[index-1]))result= source[index];elseresult = source[index-1];}else{if(index == source.length - 1 || Math.abs(source[index]) < source[index+1])result= source[index];elseresult = source[index+1];}return result;}public static void main(String[] args) throws Exception{int[] arr1 = new int[]{-23,-22,-3,-2,1,2,3,5,20,120};int[] arr2 = new int[]{-23,-22,-12,-6,-4};int[] arr3 = new int[]{1,22,33,55,66,333};int value = getMinAbsoluteValue(arr1);System.out.println(value);value = getMinAbsoluteValue(arr2);System.out.println(value);value = getMinAbsoluteValue(arr3);System.out.println(value);}
}
李宁的新浪微博 http://weibo.com/androidguy 欢迎关注
百度面试题:求绝对值最小的数相关推荐
- Java学习手册:(数据结构与算法-数组)如何求绝对值最小的数?
问题: 有一个升序排列的数组,数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,例如,数组{-10,-5,-2,7,15,50},绝对值最小的是2. 方法一: 对于升序数组,求绝对值最小的数可 ...
- 面试题: 求绝对值最小的数
题目: 有⼀个已经排好序的整数序列(升序,⽆重复项),序列中可能有正整数.负整数或者0,请 ⽤你认为最优的⽅法求序列中绝对值最⼩的数.**_要求不能使⽤顺序⽐较的⽅法(时间复杂 度需要⼩于 O(n) ...
- javascript:求绝对值最小的数
问题来源:http://androidguy.blog.51cto.com/974126/1129543 有一个已经排序的数组(升序),数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,要求, ...
- 如何求数组中绝对值最小的数?
""" 有一个升序排列的数组,数组中可能有正数,负数或0,求数组中元素的绝对值最小的数.例如,数组[-10,-5,-2,7,15,50],该数组中绝对值最小的数是2 &q ...
- JSK-399 绝对值最小的数【大数】
绝对值最小的数 输入 10 个数,找出其中绝对值最小的数,将它和最后一个数交换. 输入格式 输入一行包括 10 个绝对值不超过 1000 的整数. 输出格式 输出 10 个交换后的整数,答案输出在一行 ...
- 找出有序数组中绝对值最小的数
假设数组是从小到大排序,数值可能为负数.0.正数. 思路一 可以一次性遍历一遍,找出绝对值最小值,此时时间复杂度为O(N),缺点是没有利用数组是有序的这一特点. int getMinAbs(int[] ...
- 【面试】求最大最小的数
一.代码 package DR6;import java.util.Scanner;class EX10 {/*** @param args*/public static void main(Stri ...
- 历届试题 核桃的数量(3个数的最小公倍数),翻硬币(贪心),买不到的数目(在范围内暴力,找范围,最小公倍数是上界,最小的数是下界),兰顿蚂蚁(dfs,模拟)
历届试题 核桃的数量 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 各组的核桃数量必须相同 各组内必须能 ...
- (笔试题)将数组分成两组,使两组的和的差的绝对值最小
题目: 数组中的数分为两组,给出一个算法,使得两个组的和的差的绝对值最小数组中的数的取值范围是0<x<100,元素个数也是大于0,小于100 比如a[]={2,4,5,6,7},得出的两组 ...
- 面试题45. 把数组排成最小的数
题目: 面试题45. 把数组排成最小的数 题解: 1. 题解一: 2. 题解二: * 解题思路:* 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来.关 ...
最新文章
- MySQL 报错 1055
- NUXT 入门第一课: 关于 Nuxt.js
- 解决ftp上传connection reset错误
- python生成xml文件工具_Python根据指定文件生成XML的方法
- 【模拟】【递归】电子表格(jzoj 2127)
- 第八章xgboost/lightGBM
- 专访uPlane陈宏强:手机遥控固定翼飞机还是蓝海
- Python求数独的补充
- 牛客网模拟笔试——膨胀的牛牛(JavaScript)
- win11系统正式版介绍
- ubuntu 如何确定虚拟机中的网关_如何在虚拟机中安装Kali Linux
- PreparedStatement 批处理
- java播放器_Java视频播放器的制作
- C# 自定义控件,日期时间选择输入插件
- 【多校训练】2021牛客多校第二场
- 2020年最好用的手机是哪一款_2020年值得入手的三款手机,性价比超高,网友:真香!...
- 详解滤波电路工作原理及相关参数计算
- ApowerMirror PJ教程
- 《数据结构》C语言版 严蔚敏版本 学习笔记
- Java中间件-Elasticsearch
热门文章
- 包包各部位名称图解_手袋包细节详解
- 如何创建lpar通过HMC/VIOS(动态加disk)
- 熊猫在线压缩图_回归图与熊猫和脾气暴躁
- vue调用摄像头pc+移动端
- uuctf-Unicorn shop----easy_web----CheckIN
- 增加linux vg 空间大小_Desperate struggle
- docker compose自定义IP报错ERROR: Pool overlaps with other one on this address space
- 在R语言中如何打开一般方法打不开的中文xls文件?
- IE和Firefox浏览器下javascript、CSS兼容性研究
- 一篇论文的正确格式是什么?