javascript中求绝对值最小的数

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

问题分解:

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

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

<script language="javascript">
var getBound = function(a,fr,to){
    //[fr,to]是候选位置区间,位置从0开始计数
    var b=fr,f=fr,t=to,s=true;
    var left=function(b){return a[b-1];};//获取该位置右边的数字,增加代码可读性
    var right=function(b){return a[b];};//获取该位置左边的数字,增加代码可读性
    if(a.length===0){
        return -1;//数组为空,返回-1
    }else{
        if(right(b)>=0){
            s=false;//初始化位置就是要找的位置
        }else{
            for(var i=1;i<=100 && s;i++){
                b=f+Math.ceil((t-f)/2);//找到中点
                if(right(b)===undefined||(left(b)<0 && right(b)>=0)){
                    s=false;//中点就是要找的位置
                }else if(right(b)<0){
                    f=b;//下次前进找中点
                }else{
                    t=b;//下次后退找中点
                }
            }
        }
        return b;
    }
};
var getMinAbs = function(a){
    var b=getBound(a,0,a.length);//获取位置
    if(b>=0){
        if(b===0){
            return Math.abs(a[b]);//位置在最左边
        }else if(b===a.length){
            return Math.abs(a[b-1]);//位置在最右边
        }else{
            return (Math.abs(a[b])>Math.abs(a[b-1])?Math.abs(a[b-1]):Math.abs(a[b]));//位置在中间
        }
    }else{
        return false;
    }
};     

//测试代码
var myArray=[-20,-13,-4,0,0,0,6,77,200,201,202];
alert("[" + myArray + "]: " + getMinAbs(myArray));
var myArray=[];
alert("[" + myArray + "]: " + getMinAbs(myArray));
var myArray=[-1];
alert("[" + myArray + "]: " + getMinAbs(myArray));
var myArray=[1];
alert("[" + myArray + "]: " + getMinAbs(myArray));
var myArray=[0,0];
alert("[" + myArray + "]: " + getMinAbs(myArray));
var myArray=[-1,-1];
alert("[" + myArray + "]: " + getMinAbs(myArray));
</script>

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 求代码
, return
, 位置
, alert
, var
, 数组中求乘积
, abs绝对值一维数组
, 绝对值
, 数组中求第K大数
, 求小于n
javascript数组增加
绝对值最小的数、绝对值最小的有理数、绝对值最小的实数、绝对值最小的实数是、绝对值是最小的有理数,以便于您获取更多的相关知识。

时间: 2024-10-29 22:17:43

javascript中求绝对值最小的数的相关文章

百度面试题:求绝对值最小的数

有一个已经排序的数组(升序),数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现 例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4. 算法实现的基本思路 找到负数和正数的分界点,如果正好是0就是它了,如果是正数,再和左面相邻的负数绝对值比较,如果是负数,取取绝对值与右面正数比较.还要考虑数组只有正数或负数的情况. 我根据这个思路用Java简单实现了一个算法.大家有更好的实现方法欢迎跟帖

百度:求绝对值最小的数

我只是从网上搜集的,下面的代码或许有错误. 看了会Hadoop,和传华聊了会,他说,他们那三等奖8000,:打算要回宿舍了,不经意间看到了这个题,貌似简单,其实还是比较有难度的. 一段时间只能干一件事就行了. 有一个已经排序的数组(升序),数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现,例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4.  算法实现的基本思路:找到负数和正数的分界点

javascript中%求余数或取模的例子

js中取余数 0%4 0 1%4 1 2%4 2 3%4 3 4%4 0 5%4 1 例子 //以分钟为基数,获取分钟包含的天.小时.分钟 function getCostTime(minutes){     var day=parseInt(minutes/1440);     var hour=parseInt(minutes/60);     var minute=parseInt(minutes%60);     var string_description=day>0?day+"

百度面试题:求一个已排序的数组中绝对值最小的元素

题目为: 有一个已经排序的数组(升序),数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现 例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4. 这一题该如何求呢? 初步的解决思路是:     1.数组中的元素全为正,取最左边的数字:     2.数组中的元素全为负,取最右边的数字的绝对值:     3.数组中有正数有负数,就用二分法查找,判断中间元素的符号        a)中间元素为

[经典面试题]排序数组中绝对值最小元素

[题目] 题目为: 有一个已经排序的数组(升序),数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现 例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4. [分析] 给定数组是已经排好序的,且是升序,没有重复元素. 一个简单的思路,就是一次性遍历数组,求出数组的元素的绝对值的最小值,这样的时间复杂度为O(n). 但是,这样就浪费了题目的一个条件:数组是已经排好序的.所以,需要对原来的题目

JavaScript中的运算符种类及其规则介绍_基础知识

JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScript中的运算符. 一.JavaScript运算符的种类 1.算术运算符:+ . - .* . / . % . -(一元取反) . ++ . -- 2.等同全同运算符:== . ===. !== . !=== 3.比较运算符:< . > . <= . >= 4.字符串运算符:< .

javascript中比较两个数的大小,为什么有的数可以,有的不可以,新手 求指教

问题描述 javascript中比较两个数的大小,为什么有的数可以,有的不可以,新手 求指教 代码:<br> var a=prompt("请输入第一个数",0);<br> var b=prompt("请输入第二个数",0); </p> <p>function Max(c,d)<br> {<br> if(c > d) </p> <p>{ <br> aler

c语言-C语言 给定一个整数序列和一个数k,求这个序列中第k小的数。

问题描述 C语言 给定一个整数序列和一个数k,求这个序列中第k小的数. C语言 给定一个整数序列和一个数k,求这个序列中第k小的数. 我的程序 #include<stdio.h> int n[10000]; void Nok() { int i=0,j=0,t,k,q=0; char c; scanf("%d",&n[i++]); c=getchar(); while(c!='n') { scanf("%d",&n[i++]); c=ge

javascript中数组是如何求最大值

 数组如何求最大值,想必很多的朋友都不会吧,本文为大家介绍下javascript中数组是如何求最大值的,感兴趣的朋友不要错过 代码如下: <html>  <head>  <title>数组的最大值的获取</title>    <script>  //定义数组  var arr = [1,4,3,9,5,0,-1,7,22];    //最大值的下标,先假定为第一个元素的下标  var index = 0;  for(var x = 0; x &l