问题描述:

有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现

例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。

算法实现的基本思路:

找到负数和正数的分界点,如果正好是0就是它了,如果是正数,再和左面相邻的负数绝对值比较,如果是负数,取取绝对值与右面正数比较。还要考虑数组只有正数或负数的情况。

package JBArray;public class GetMinAbsoluteValue {/*** 三种情况: 1、有正负数 2、只有正数 3、只有负数* * 找到正负数临界点,比较绝对值大小即可*/private static int getMinAbsoluteValue(int[] a) {if (a == null) {return Integer.MIN_VALUE;}int len = a.length;if (len < 1) {return Integer.MIN_VALUE;}// 数组中没有负数if (a[0] > 0) {return a[0];}// 数组中没有正数if (a[len - 1] <= 0) {return a[len - 1];}// 数组中有正有负int mid = 0;int begin = 0;int end = len - 1;int absMin = 0;// 计算负数和正数分界点while (true) { mid = begin + (begin + end) / 2;// 计算当前的索引if (a[mid] == 0) {              //如果值为0,就是绝对值最小的值return 0;} else if (a[mid] > 0) {        //如果值大于0,在左半部分查找if (a[mid - 1] > 0)         end = mid - 1;          //移一位大于0,结束下标变为mid-1else if (a[mid - 1] == 0)return 0;               //移一位等于0,就是绝对值最小的值elsebreak;                  //没找到} else {                        //如果值小于0,在右半部分查找if (a[mid + 1] < 0)begin = mid + 1;else if (a[mid + 1] == 0)return 0;elsebreak;}}// 获取正负数分界点处绝对值最小的值if (a[mid] > 0) {if (a[mid] < Math.abs(a[mid - 1])) //大于0,和前面的一个数比较absMin = a[mid];elseabsMin = a[mid - 1];} else {if (a[mid] < Math.abs(a[mid + 1]))//小于0,和后面的一个数比较absMin = a[mid];elseabsMin = a[mid + 1];}return absMin;}public static void main(String[] args) {int[] a1 = { -10, -5, -2, 7, 15, 50 };int[] a2 = { 2, 4, 6, 7, 8 };int[] a3 = { -13, -9, -6, -4, -3 };int value = getMinAbsoluteValue(a1);System.out.println(value);int value1 = getMinAbsoluteValue(a2);System.out.println(value1);int value2 = getMinAbsoluteValue(a3);System.out.println(value2);}}

如何求绝对值最小的数相关推荐

  1. Java学习手册:(数据结构与算法-数组)如何求绝对值最小的数?

    问题: 有一个升序排列的数组,数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,例如,数组{-10,-5,-2,7,15,50},绝对值最小的是2. 方法一: 对于升序数组,求绝对值最小的数可 ...

  2. 面试题: 求绝对值最小的数

    题目: 有⼀个已经排好序的整数序列(升序,⽆重复项),序列中可能有正整数.负整数或者0,请 ⽤你认为最优的⽅法求序列中绝对值最⼩的数.**_要求不能使⽤顺序⽐较的⽅法(时间复杂 度需要⼩于 O(n) ...

  3. javascript:求绝对值最小的数

    问题来源:http://androidguy.blog.51cto.com/974126/1129543 有一个已经排序的数组(升序),数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,要求, ...

  4. 如何求数组中绝对值最小的数?

    """ 有一个升序排列的数组,数组中可能有正数,负数或0,求数组中元素的绝对值最小的数.例如,数组[-10,-5,-2,7,15,50],该数组中绝对值最小的数是2 &q ...

  5. JSK-399 绝对值最小的数【大数】

    绝对值最小的数 输入 10 个数,找出其中绝对值最小的数,将它和最后一个数交换. 输入格式 输入一行包括 10 个绝对值不超过 1000 的整数. 输出格式 输出 10 个交换后的整数,答案输出在一行 ...

  6. 找出有序数组中绝对值最小的数

    假设数组是从小到大排序,数值可能为负数.0.正数. 思路一 可以一次性遍历一遍,找出绝对值最小值,此时时间复杂度为O(N),缺点是没有利用数组是有序的这一特点. int getMinAbs(int[] ...

  7. 【面试】求最大最小的数

    一.代码 package DR6;import java.util.Scanner;class EX10 {/*** @param args*/public static void main(Stri ...

  8. c语言中用if语句计算两数之差的绝对值,用位运算实现求绝对值-有效避开if-else判断...

    用位运算实现求绝对值-有效避开if-else判断 By SmartPtr(http://www.cppblog.com/SmartPtr/) 一般情况下,如果要我们写一个求绝对值的函数,我们的实现很有 ...

  9. JS前端算法:乱序整数序列两数之和绝对值最小

    // 乱序整数序列两数之和绝对值最小 function sortAbs(arr) {let tmp = arr.sort((a, b) => a - b); // 先排序,感觉也可以不排序if ...

  10. CSDN挑战编程——《绝对值最小》

    绝对值最小 题目详情: 给你一个数组A[n],请你计算出ans=min(|A[i]+A[j]|)(0<=i,j<n). 例如:A={1, 4, -3}, 则: |A[0] + A[0]| ...

最新文章

  1. FileReader对象和FormData对象
  2. Entity Framework中的Migrations
  3. Hasor【付诸实践 01】低代码框架 DataQL 聚合查询引擎 SQL执行器报错 Query dialect missing 原因分析及解决(针对GreenPlum数据库)
  4. Python—进程、线程、协程
  5. MyBatis-Plus——增删查改
  6. 链表最小结构(C++版本)
  7. 实用干货!大数据入门的常用技术栈全在这里了
  8. 模块ntdll中出现异常eaccessviolation_SAP ERP软件中的物料凭证 MIGO
  9. cad墙线打断lisp_CAD墙体如何打断,用tr命令不行,打散的话墙线会错位?
  10. hexo+next主题美化
  11. “游匣”冲击暑期档——戴尔为中国用户定制笔记本电脑
  12. 自己动手写代码生成器
  13. Linux命令:readelf
  14. org.springframework.hateoas.config.HateoasConfiguration required a single bean, but 15 were found:
  15. 基于重心距离识别的蠓虫分类模型(唯一能看的只有代码)
  16. NAVICAT 还原mssql bak备份文件
  17. 关于RoboMaster2019新型能量机关的一些感想(大风车)
  18. WKWebView、Safari、SFSafariViewController的区别与选取
  19. 基于51单片机的DS1302涓流充电计时芯片详细学习(时钟制作)
  20. c语言编程小练习-九九乘法表

热门文章

  1. (八)高德地图之添加marker标记点
  2. omv安装mysql插件_Openmediavault第三方插件安装教程
  3. cp:略过目录:”文件名“
  4. 包包各部位名称图解_七大箱包主要部位的结构专业术语和特性
  5. 一、数据库之理论基础
  6. 深信服python开发工程师面试经验,深信服软件工程师面试经验
  7. python预测你的小孩身高_儿童身高预测方法
  8. python的分隔符_python分隔符
  9. Mysql优化-02
  10. 计算机心理学测试题目及答案解析,测量心理学考研重点选择题(含答案)