不用数组函数,也不用冒泡排序,得到一维数字数组第二大的值

之前面试,一位大牛问到,怎么得到一维数组里面第二大的数值,

我脑中想到的是冒泡排序,他说不能用冒泡排序,

然后我想到还有数组函数,大牛说不能用数组函数,

我就茫然了,大牛告诉了我两个方法,现在我将两种方法整理一下:


1:找到最大的值,然后unset掉,再找一次


function getMax($arr,$ifUnset='no')//$arr 待处理数组   $ifUnset 是否需要unset最大值,默认不
{
    $max = $arr[0];
    $key = 0;
    foreach ($arr as $k => $v) {
        if ($v > $max) {
            $max = $v;
            $key = $k;
        }
    }
    if($ifUnset==='yes'){
        unset($arr[$key]);
        return $arr;
    }else{
        return $max;
    }
}
$arr = array(12, 35, 143, 32, 23, 45, 26, 66, 18, 78, 99, 178);
$arr1 = getMax($arr,'yes');//先将最大的值unset,得到新数组
var_dump(getMax($arr1));//得到新数组的最大值


2,第二种方法,用两个变量,将数组第一个数字和第二个数字保存,然后分别和第三位数以后的值对比


$arr = array(12, 35, 143, 32, 23, 45, 26, 66, 18, 78, 99, 178);
$max1 = $max2 = 0;
foreach ($arr as $k => $v) {
    if ($k <= 1) {
        if ($arr[0] >= $arr[1]) {
            $max1 = $arr[0];
            $max2 = $arr[1];
        } else {
            $max1 = $arr[1];
            $max2 = $arr[0];
        }
    } else {
        if ($v >= $max1) {
            $max2 = $max1;
            $max1 = $v;
        } elseif ($v >= $max2 && $v < $max1) {
            $max2 = $v;
        }
    }
    echo '最大数: ' . $max1 . '----第二大数: ' . $max2 . '<br/>';
}

以上代码也许不是最好的,也就这样了吧,有写得更好的大牛,希望不吝赐教.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值