在 PHP 中找到第二大的绝对值形式数组

4

数组中第二大的绝对值

输入:array(13, -12, 8, 2, 5)

期望答案:12

这是我的代码:

<?php
function print2largest($arr, $arr_size)
{
    if ($arr_size < 2)
    {
        echo(" Invalid Input ");
        return;
    }     
    $first = $second = PHP_INT_MIN;
    for ($i = 0; $i < $arr_size ; $i++)
    {
        if ($arr[$i] > $first)
        {
            $second = $first;
            $first = $arr[$i];
        }

        else if ($arr[$i] > $second &&
                 $arr[$i] != $first)
            $second = $arr[$i];
    }
    if ($second == PHP_INT_MIN)
        echo("There is no second largest element\n");
    else
        echo("The second largest element is " . $second . "\n");
}     
$arr = array(13, -12, 8, 2, 5);
$n = sizeof($arr);
print2largest($arr, $n);
?>

我得到的输出:8。

如果数字小于零,则将其乘以“-1”。因此,如果“$arr[$i] < 0”;那么“$arr[$i] *= -1”。 - popeye
为什么是“-12”?“8>-12”。 - Alive to die - Anant
5个回答

13

这可以很容易地用“php方式”完成:

$arr = array(13, -12, 8, 2, 5);
$absoluteArr = array_map('abs', array_unique($arr));
rsort($absoluteArr);
echo $absoluteArr[1];

非常优雅。我喜欢它。 - Mark Walet

2

不需要写那么多代码,直接这样做:

<?php

    $array  = array(13, -12, 8, 2, 5);
    $final_array = array_unique(array_map('abs',$array)); // remove duplicates and apply abs() to all elements
    rsort($final_array,SORT_NUMERIC); //reverse sort array numerically

    echo $final_array[1]; //get second highest

Output:-https://3v4l.org/mgjaO

Reference:-

abs()

array_map()

array_unique()

rsort()


0

我不确定这需要一个函数,如果你只是在每个元素更新为absolute值后使用array_map将数组rsort并查看第二个位置:

function print2largest($arr) {
    if (count($arr) < 2) {
        echo(" Invalid Input ");
        return;
    }

    $arr = array_map("abs", $arr);
    rsort($arr);
    return $arr[1];
}

$arr = array(13, -11, 9, 2, 5);
print2largest($arr);

0

在这里的数值上加上 abs() 即可

function print2largest($arr, $arr_size)
{
if ($arr_size < 2)
{
    echo(" Invalid Input ");
    return;
}

$first = $second = PHP_INT_MIN;
for ($i = 0; $i < $arr_size ; $i++)
{
    if (abs($arr[$i]) > $first)
    {
        $second = $first;
        $first = abs($arr[$i]);
    }

    else if (abs($arr[$i]) > $second &&
             abs($arr[$i]) != $first)
        $second = abs($arr[$i]);
}
if ($second == PHP_INT_MIN)
    echo("There is no second largest elementn");
else
    echo("The second largest element is " . $second . "n");
}

$arr = array(13, -12, 8, 2, 5);
$n = sizeof($arr);
print2largest($arr, $n);

第二大的元素是12n。

0
$array = [13, -12, 8, 2, 5];
echo getSecondLargestAbsolute($array); // 12

function getSecondLargestAbsolute($array)
{
    $values = [];
    if (count($array) == count($array, COUNT_RECURSIVE)) {
        $values = $array;
    } else {
        foreach (new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array)) as $item) {
            $values[] = $item;
        };
    }

    array_walk($values, function (&$val){
        return $val = abs($val);
    });

    rsort($values);

    return $values[1];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接