第三大的数

题意:

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。

示例 1:

输入:[3, 2, 1]
输出:1
解释:第三大的数是 1 。

示例 2:

输入:[1, 2]
输出:2
解释:第三大的数不存在, 所以返回最大的数 2 。

示例 3:

输入:[2, 2, 3, 1]
输出:1
解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。

提示:

  • 1 <= nums.length <= 10^4
  • -2^31 <= nums[i] <= 2^31 - 1

进阶:你能设计一个时间复杂度 O(n) 的解决方案吗?

题目来源: https://leetcode.cn/problems/third-maximum-number/description/

解题方法:

方法一:php内置函数,先去重,再排序

function thirdMax($nums) {
    $nums = array_unique($nums); 
    rsort($nums);
    if(count($nums) < 3){
        return $nums[0];
    }
    return $nums[2];
}

方法二:方法一的展开式,主要为了温习 【快速排序算法】

// 展开
function thirdMax($nums) {
    $nums = array_unique($nums);
    $nums = $this->quickSort($nums);
    if(count($nums) < 3){
        return $nums[0];
    }
    return $nums[2];
}

// 快速排序
function quickSort($nums){
    $len = count($nums);
    if($len <= 1){
        return $nums;
    }
    $base = $nums[0]; //标量
    $left = [];     //小
    $right = [];    //大
    foreach($nums as $key => $value){
        if($key!=0){
            if($value >= $base){
                $left[] = $value;
            }else{
                $right[] = $value;
            }
        }
        
    }
    $left = $this->quickSort($left);
    $right = $this->quickSort($right);
    return array_merge($left,array($base),$right);
}

方法三:1、 变量初始值设置为null,不存储最小值;2 、按大小顺序填充,相同值直接跳过(时间复杂度 O(n)

// 1 变量初始值设置为null,不存储最小值
// 2 按大小顺序填充,相同值直接跳过
function thirdMax($nums) {
    $first = $second = $third = null;
    foreach($nums as $value){
        if($value > $first || $first == null){
            $third = $second;
            $second = $first;
            $first = $value;
        }else if(($value > $second || $second == null) && $value < $first){
            $third = $second;
            $second = $value;
        }else if(($value > $third || $third == null) && $value < $second){
            $third = $value;
        }
    }
    return $third === null ? $first : $third;
}

参考:
作者:mingge
链接:https://leetcode.cn/problems/third-maximum-number/solutions/1603202/by-mingge-8-czql/
来源:力扣(LeetCode)

你可能感兴趣的:(PHP,算法,数据结构,php)