javascript - 求一个数组中第二大的元素
PHP中文网
PHP中文网 2017-04-11 12:49:12
[JavaScript讨论组]

要求:

1.不能对这个数组进行整体排序

2.若要用循环,只能一重循环

3.不使用额外空间

请问该怎么实现呢?

PHP中文网
PHP中文网

认证0级讲师

全部回复(4)
怪我咯
aa=[1,3,5,2,7,6]
aa[aa.indexOf(Math.max.apply(null,aa))]=null
Math.max.apply(null,aa)
6
大家讲道理

用两个指针, 第一个指向第一个元素 , 第二个执行第二个元素, 然后遍历, 比较, 改指针...

伊谢尔伦

接楼上思路

function findSecondNum(arr){
    var max=arr[0];
    var second=arr[1];
    for(var i=0,len=arr.length;i<len;i++){
        if(arr[i]>max){
           second=max;
           max=arr[i];
        }else if(arr[i]<max&&arr[i]>second){
           second=arr[i];
        }
    }
    return second;
}
怪我咯

这个的难度在“不使用额外空间”
严格来说 “浴火小青春”的实现还是用了“额外空间”放置新临时变量i,以及max,second等

function find2Max(arr){ //仅对数值数组,但不判断数组是否全是数值
    if(arr.length < 2){ // 处理传入数据不符合的情况
        return NaN;
    }
    
    if (arr.length == 2){ // 处理只有2个数据的情况
        return (arr[0]>arr[1]?arr[1]:arr[0]);
    }
    // 后面处理数据有3个及以上的情况
    if(arr[0]>arr[1] && arr[0]>arr[2] ){
        if(arr[1]<arr[2]){
            arr[1]=arr[2];
        }
    }
    if(arr[1]>arr[0] && arr[1]>arr[2]){
        if(arr[0]>arr[2]){
            arr[2]=arr[0];
            arr[0]=arr[1];
        }else{
            arr[0]=arr[1];
            arr[1]=arr[2];
        }
    }
    if(arr[2]>arr[0] && arr[2]>arr[1]){
        if(arr[0]>arr[1]){
            arr[1]=arr[0]
            arr[0]=arr[2];
        }else{
            arr[0]=arr[2]
        }
    }
    arr[2]=3;
    for(;arr[2]<arr.length;arr[2]++){
        if( arr[ arr[2] ] > arr[0] ){
            arr[1]=arr[0];
            arr[0]=arr[ arr[2] ];
        }else if( arr[ arr[2] ] > arr[1]){
            arr[1] = arr[ arr[2] ] ;
        }
    }
    return arr[1];
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号