php中第二大绝对值表单数组
第二大绝对值形式数组 输入:数组(13,-12,8,2,5) 预期答复:12 这是我的密码php中第二大绝对值表单数组,php,arrays,absolute,Php,Arrays,Absolute,第二大绝对值形式数组 输入:数组(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 <
<?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
可以用“php方式”轻松完成:
我不确定这是否需要一个函数,如果您只是在每个元素用值更新后创建数组,并查看第二个位置:
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);
函数print2largest($arr){
如果(计数($arr)<2){
回波(“无效输入”);
返回;
}
$arr=数组映射(“abs”,$arr);
rsort($arr);
返回$arr[1];
}
$arr=数组(13,-11,9,2,5);
print2largest($arr);
只需在此处的值中添加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);
函数print2largest($arr,$arr\u size)
{
如果($arr_大小<2)
{
回波(“无效输入”);
返回;
}
$first=$second=PHP\u INT\u MIN;
对于($i=0;$i<$arr\u size;$i++)
{
if(abs($arr[$i])>$first)
{
$second=$first;
$first=abs($arr[$i]);
}
否则如果(abs($arr[$i])>$second&&
abs($arr[$i])!=first美元)
$second=abs($arr[$i]);
}
如果($second==PHP\u INT\u MIN)
echo(“没有第二大元素”);
其他的
echo(“第二大元素是“$second.”n”);
}
$arr=数组(13,-12,8,2,5);
$n=sizeof($arr);
print2largest($arr,$n);
第二大元素是12n
无需编写那么多代码,直接执行以下操作:
<?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
如果数字小于零,将其乘以-1
。因此,如果$arr[$i]<0
;那么$arr[$i]*=-1
为什么-12
<代码>8>-12
非常优雅。我喜欢它
<?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
$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];
}