问题:

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

方法一:

对于升序数组,求绝对值最小的数可以分为3种情况:

①如果数组第一个元素为非负数,那么绝对值最小的数肯定为数组的第一个元素;

②如果数组最后一个元素为负数,那么绝对值最小的数肯定是数组的最后一个元素;

③数组中既有正数又有负数时,首先找到正数与负数的分界点,如果分界点恰好为0,那么0就是绝对值最小的数,否则通过比较分界点左右的正数与负数的绝对值来确定最小的数。(通过二分法来查找正数与负数的分界点)

方法一代码:

package com.haobi;public class Test22 {public static void main(String[] args) {int[] a1 = {-10,-5,-2,7,15,50};//升序序列int[] a2 = {2,4,6,8,10};int[] a3 = {-13,-10,-7,-5,-3,-1};System.out.println(getMinAbsValue(a1));System.out.println(getMinAbsValue(a2));System.out.println(getMinAbsValue(a3));}public static int getMinAbsValue(int[] a) {//如果数组不存在if(a==null) {return Integer.MAX_VALUE;}int len = a.length;//如果数组存在但其中没有元素if(len < 1) {return Integer.MAX_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 = Integer.MAX_VALUE;//通过while循环找到正负数分界点while(true) {mid = begin + (end-begin)/2;//如果值等于0,则就是绝对值最小的数if(a[mid] == 0) {return 0;}else if(a[mid] > 0) { //如果值大于0,那么正负数的分界点在左半部分if(a[mid-1] > 0) {end = mid-1;}else if(a[mid-1] == 0) {return 0;}else {//找到正负数的分界线break;}}else { //如果值小于0,那么正负数的分界点在右半部分if(a[mid+1] < 0) {begin = mid+1;}else if(a[mid+1] == 0) {return 0;}else {//找到正负数的分界线break;}}}//通过正负数分界点求出绝对值最小值if(a[mid] > 0) {if(a[mid] < Math.abs(a[mid-1])) {absMin = a[mid];}else {absMin = a[mid-1];}}else {if(a[mid] < Math.abs(a[mid+1])) {absMin = a[mid];}else {absMin = a[mid+1];}}return absMin;}
}

程序输出结果如下:

-2
2
-1

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

  1. es6 数组排序_重读《学习JS数据结构与算法-第三版》- 第3章 数组 二

    定场诗 守法朝朝忧闷,强梁夜夜欢歌:损人利己骑马骡,正值公平挨饿:修桥补路瞎眼,杀人放火儿多:我到西天问我佛,佛说:我也没辙! 前言 读<学习JavaScript数据结构与算法>- 第3章 ...

  2. 《学习JavaScript数据结构与算法》第三章 数组

    文章目录 前言 一.创建 && 初始化数组 二.操作数组 push-添加元素于末尾 unshift-添加元素于开头 pop-从数组末尾开始删除元素 shift-从数组开头开始删除元素 ...

  3. 一般项目中哪里体现了数据结构_优秀程序员都应该学习的数据结构与算法项目(GitHub 开源清单)...

    前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 强烈推荐 GitHub 上值得前端学习的数据结构与算法项目,包含 gif ...

  4. GitHub 上值得前端学习的数据结构与算法项目

    Hello,大家好,我是你们的 前端章鱼猫. 简介 前端章鱼猫从 2016 年加入 GitHub,到现在的 2020 年,快整整 5 个年头了. 相信很多人都没有逛 GitHub 的习惯,因此总会有开 ...

  5. 学习JavaScript数据结构与算法(一):栈与队列

    本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...

  6. 读《学习JavaScript数据结构与算法》 第二章

    第二章 ECMAScript和TypeScript概述 文章目录 第二章 ECMAScript和TypeScript概述 前言 一.let const 二.模板字面量 支持换行 拼接方式 三.函数的默 ...

  7. 重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)

    定场诗 伤情最是晚凉天,憔悴厮人不堪言: 邀酒摧肠三杯醉.寻香惊梦五更寒. 钗头凤斜卿有泪,荼蘼花了我无缘: 小楼寂寞新雨月.也难如钩也难圆. 前言 本章为重读<学习JavaScript数据结构 ...

  8. 汇智动力学院——Java 浅谈数据结构和算法

    以前不管自己还是朋友在面试java工程师岗位的时候,都会被问到这样的问题: "介绍下java中的数据结构和算法", 很多朋友被问到的时候发现无从下口,甚至特别是一些初级java工程 ...

  9. JavaScript数据结构与算法——数组详解(下)

    1.二维与多维数组 JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组. 1.1 创建二维数组 二维数组类似一种由行和列构成的数组表格,在JavaScript ...

最新文章

  1. java 对象等于_java 之类对象等于对象 | 学步园
  2. 计算机应用技木就业前京,计算机专业毕业的研究生在京就业情况及启示.doc
  3. MxNet 迁移学习实现深度学习分类
  4. php ado 建立注册,如何注册ADO与DAO [Access软件网]
  5. Python进阶:如何将字符串常量转化为变量? 1
  6. Hexo+Github搭建个人博客(一)——开始搭建
  7. DedeCMS 5.7 后门漏洞
  8. 弹性卡箍零件自动化检测 与包装生产线的研制
  9. 笨笨-歌词伴侣V1.2(酷狗KRC转LRC,LRC歌词批量下载)
  10. [转]Selenium html之于ul标志代码分析与使用
  11. Xcode可以清理哪些缓存?
  12. 2018年Google开发者大会
  13. HTML5 第004篇 <abbr>标签【定义缩写】
  14. FTPS“严重错误: gnutls_handshake: A TLS fatal alert has been received.”
  15. 【Java】线程池、Lambda表达式
  16. MATLAB---构造一个插值三次样条曲线
  17. 造成主板通电自动开机的原因 【转】
  18. python二级准备一个月能行吗_计算机二级选哪个?一个多月的准备时间够吗?
  19. oneDrive 无法连接
  20. Linux LKM suterusu代码分析(一)

热门文章

  1. nodejs探秘:require加载模块的原理及代码实现
  2. Gearman 心得
  3. 苹果官方iPhone/iPad以旧换新5步攻略
  4. 远程连接 部分基础命令
  5. 店铺综合分中有关排序和等份的问题
  6. 快手集福气中国牛 2021快手集福卡活动规则
  7. pyqt中treeview控件右键单击操作
  8. 几个p2p开源项目[转] - 文渊阁 - 博客大巴
  9. 陈泽天 java_百名“程序猿”捉对较量 600组小分队远程亮剑
  10. 使用Python下载电影