问题来源:http://androidguy.blog.51cto.com/974126/1129543
有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。

问题分解:

第一步:二分法寻找改变符号的位置(0视为正数)

第二步:比较位置左右数字的绝对值大小,取较小的那一个

  1. <script language="javascript">
  2. var getBound = function(a,fr,to){
  3. //[fr,to]是候选位置区间,位置从0开始计数
  4. var b=fr,f=fr,t=to,s=true;
  5. var left=function(b){return a[b-1];};//获取该位置右边的数字,增加代码可读性
  6. var right=function(b){return a[b];};//获取该位置左边的数字,增加代码可读性
  7. if(a.length===0){
  8. return -1;//数组为空,返回-1
  9. }else{
  10. if(right(b)>=0){
  11. s=false;//初始化位置就是要找的位置
  12. }else{
  13. for(var i=1;i<=100 && s;i++){
  14. b=f+Math.ceil((t-f)/2);//找到中点
  15. if(right(b)===undefined||(left(b)<0 && right(b)>=0)){
  16. s=false;//中点就是要找的位置
  17. }else if(right(b)<0){
  18. f=b;//下次前进找中点
  19. }else{
  20. t=b;//下次后退找中点
  21. }
  22. }
  23. }
  24. return b;
  25. }
  26. };
  27. var getMinAbs = function(a){
  28. var b=getBound(a,0,a.length);//获取位置
  29. if(b>=0){
  30. if(b===0){
  31. return Math.abs(a[b]);//位置在最左边
  32. }else if(b===a.length){
  33. return Math.abs(a[b-1]);//位置在最右边
  34. }else{
  35. return (Math.abs(a[b])>Math.abs(a[b-1])?Math.abs(a[b-1]):Math.abs(a[b]));//位置在中间
  36. }
  37. }else{
  38. return false;
  39. }
  40. };
  41. //测试代码
  42. var myArray=[-20,-13,-4,0,0,0,6,77,200,201,202];
  43. alert("[" + myArray + "]: " + getMinAbs(myArray));
  44. var myArray=[];
  45. alert("[" + myArray + "]: " + getMinAbs(myArray));
  46. var myArray=[-1];
  47. alert("[" + myArray + "]: " + getMinAbs(myArray));
  48. var myArray=[1];
  49. alert("[" + myArray + "]: " + getMinAbs(myArray));
  50. var myArray=[0,0];
  51. alert("[" + myArray + "]: " + getMinAbs(myArray));
  52. var myArray=[-1,-1];
  53. alert("[" + myArray + "]: " + getMinAbs(myArray));
  54. </script>

以myArray=[-20,-13,-4,0,0,0,6,77,200,201,202]为例,测试弹出:

本文转自 hexiaini235 51CTO博客,原文链接:http://blog.51cto.com/idata/1131865,如需转载请自行联系原作者

javascript:求绝对值最小的数相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 格式化时间中HH:mm:ss与hh:mm:ss的区别
  2. 快速统计hbase中某张表中数据条数
  3. 【原创视频】Docker总体架构设计及各模块原理剖析
  4. VTK:灯光之LightActor
  5. 如何利用 webpack 在项目中做出亮点
  6. (c语言)二叉树中序线索(数据结构十七)
  7. HGE2D引擎按键消息分析
  8. codeblocks下载安装与解决codeblocks找不到编译器的方法
  9. 数学基础知识(2) 梯度和方向向量
  10. Package Cache搬家
  11. 小米平板2刷哪个系统更流畅_小米平板2刷lineage os与remix os及其体验
  12. 在阿里云里怎么样可以连接阿里云数据库
  13. opc服务器组态文件已写保护_opc服务器组态文件已写保护
  14. 读取nginx的conf文件_nginx.conf配置文件
  15. 解决VS Community“无法刷新此账户的凭证”和“无法添加此账户”的问题
  16. Pcie(igb)网卡调试总结:tx uint hang异常解决方法
  17. clickhouse 常用函数 算数函数 时间函数 日期函数 字符串函数 比较函数 数据类型函数 逻辑函数 类型转换函数 替换函数 数组函数 随机函数 编码函数 UUID URL IP 函数
  18. 生成学习算法.高斯判别分析(GDA).GDA与Logistic模型
  19. Python Day8 字符串练习
  20. 基于ARM开发板搭建物联网服务器

热门文章

  1. Linux下删除所有符合条件的文件
  2. Linux 入门到精通
  3. 人脸对齐:DCNN级联关键点检测2013
  4. Linux detached(分离线程) 消费者和生产者模型
  5. 计算机专业 surface,八款超骇微软 Surface二合一和笔记本电脑!哪款适合您?
  6. 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-939 区间最大和
  7. 判断WIFI打开关闭,飞行模式打开关闭
  8. About Zsh Go2Shell iTerm2
  9. “苹果税”已经让步,那“安卓税”呢?
  10. MATLAB 绘制三维坐标系下的矩形框