问题来源: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. mysql sql with_mysql5.7 查询sql 出错: with sql_mode=only_full_group_by
  2. 让服务器iis支持.apk文件下载的设置方法
  3. 《程序是怎样跑起来的》第一章
  4. Codeforces VK Cup 2015 A.And Yet Another Bracket Sequence(后缀数组+平衡树+字符串)
  5. 用户体验五要素_UX系列课(三):用户体验影响力金字塔及五大要素
  6. 一时冲动:“通往瓦尔哈拉之路的冒险”
  7. smb文件共享_使用SMB文件共享作为存储替代方案
  8. 【删库不跑路】—Linux系统自杀实验 rm -rf /* 及如何抢救和预防
  9. 高程数据处理_全国12.5米高程 DEM for WeServer 数据1.0
  10. qt 工具栏分隔符_带有分隔线和上下文工具栏的RecyclerView Android
  11. Mac下载配置aria2和baidudl
  12. abb变频器580系列改中文_ABB变频器ACS580系列
  13. xshell5安装包(百度云),官方免费版,不会强制更新,没有标签限制(2019-4-4)
  14. A8. 无人机编队飞行定位分析与讨论-大结局
  15. html表头和左侧固定js,固定表头jquery datatable的使用与定制
  16. 这 9 个 Java 开源项目 yyds
  17. 打开word文档提示文件未找到_Word格式转换大全!三分钟把100份Word文档转为PDF、PPT、JPG文件...
  18. 运行时 Entry name .... .. collided
  19. 资深程序员才能看懂的幽默时刻
  20. 104、二氧化碳气体灭火系统的灭火机理

热门文章

  1. 1DCNN 2DCNN LeNet5,VGGNet16使用tensorflow2.X实现
  2. 公平锁和非公平锁有什么区别
  3. jar包与war包部署的区别及jar包部署的一个路径访问问题
  4. 编程高手这样“长高”
  5. linux数据库awr报告,手动生成AWR报告
  6. android sdk插件开发教程,Android Studio Plugin 插件开发教程(二) —— 插件SDK中的常用对象介绍...
  7. 软件测试:V模型和W模型详解
  8. 【图像配准】光流场模型医学图像配准【含GUI Matlab源码 747期】
  9. 目标检测训练时候的不平衡问题
  10. FISCO BCOS中交易池及其优化策略