开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

javascript:求绝对值最小的数

简介:
+关注继续查看

问题来源: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. //测试代码  
  43. var myArray=[-20,-13,-4,0,0,0,6,77,200,201,202];  
  44. alert("[" + myArray + "]: " + getMinAbs(myArray));  
  45. var myArray=[];  
  46. alert("[" + myArray + "]: " + getMinAbs(myArray));  
  47. var myArray=[-1];  
  48. alert("[" + myArray + "]: " + getMinAbs(myArray));  
  49. var myArray=[1];  
  50. alert("[" + myArray + "]: " + getMinAbs(myArray));  
  51. var myArray=[0,0];  
  52. alert("[" + myArray + "]: " + getMinAbs(myArray));  
  53. var myArray=[-1,-1];  
  54. alert("[" + myArray + "]: " + getMinAbs(myArray));  
  55. </script> 

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






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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
通过HTML+CSS+Javascript实现向下滚动滚动条出现导航栏并出现回到顶部按钮点击按钮回到顶部(一)...
通过HTML+CSS+Javascript实现向下滚动滚动条出现导航栏并出现回到顶部按钮点击按钮回到顶部(一)...
8 0
通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二)...
通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二)...
26 0
Javascript实现全选按钮
Javascript实现全选按钮
12 0
通过Javascript实现把数组里的内容以表格方式呈现到页面从
通过Javascript实现把数组里的内容以表格方式呈现到页面从
8 0
HTML+CSS+Javascript实现轮播图效果
HTML+CSS+Javascript实现轮播图效果
16 0
【Web前端】【JavaScript】实现表格隔行变色
【Web前端】【JavaScript】实现表格隔行变色
24 0
JavaScript中实现replaceAll方法
我们在Java中可以使用replaceAll()方法对字符串进行批量替换,但在JS中replaceAll()方法是undefined,JS中只存在replace()方法,因此我们可以自己封装JS中replaceAll()方法供我们便捷使用。
14 0
JavaScript中实现摸球概率统计事件
在三个不透明的盒子中分别每个盒子装了两个球,第一个盒子装2个红球,第二个盒子装1个红球和1个蓝球,第三个盒子装2个蓝球,问:随机从三个盒子中取出一个球,问这个球是红球的概率?
12 0
JavaScript、jQuery实现“社区便利店收银系统”
随着个性化服务发展,学校、街边、社区等都流行将水果等商品洗净、切好,并装盒,按份出售。现开发一个“社区便利店收银系统”,店中每天提供固定种类的水果,装盒后,标记每一份价格,按份进行销售。在系统中,打开收银网页(casher.html),点击“+”添加销售水果,点击“结账”进行购买水果结算,点击“完成交易”进行下一个新用户购买。
55 0
【JavaScript-动画原理】如何使用js进行动画效果的实现
【JavaScript-动画原理】如何使用js进行动画效果的实现
10 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载