Skip to content

Latest commit

 

History

History
106 lines (82 loc) · 2.68 KB

414-third-maximum-number.md

File metadata and controls

106 lines (82 loc) · 2.68 KB

414. Third Maximum Number - 第三大的数

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。

示例 1:

输入: [3, 2, 1]

输出: 1

解释: 第三大的数是 1.

示例 2:

输入: [1, 2]

输出: 2

解释: 第三大的数不存在, 所以返回最大的数 2 .

示例 3:

输入: [2, 2, 3, 1]

输出: 1

解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。

题目标签:Array

题目链接:LeetCode / LeetCode中国

题解

Language Runtime Memory
c 6 ms N/A
int thirdMax(int* nums, int numsSize) {
    int *a[3] = { NULL, NULL, NULL };
    for (int i = 0; i < numsSize; i++, nums++) {
        if (a[0] == NULL) {
            a[0] = nums;
        }
        else {
            if (*nums > *a[0]) {
                if (a[1] == NULL) {
                    a[1] = a[0];
                }
                else {
                    if (*a[1] > *a[0]) {
                        if (a[2] == NULL || *a[0] > *a[2]) {
                            a[2] = a[0];
                        }
                    }
                    if (*a[1] < *a[0]) {
                        if (a[2] == NULL || *a[1] > *a[2]) {
                            a[2] = a[1];
                        }
                        a[1] = a[0];
                    }
                }
                a[0] = nums;
            }
            if (*nums < *a[0]) {
                if (a[1] == NULL) {
                    a[1] = nums;
                }
                else {
                    if (*a[1] > *nums) {
                        if (a[2] == NULL || *a[2] < *nums) {
                            a[2] = nums;
                        }
                    }
                    if (*a[1] < *nums) {
                        if (a[2] == NULL || *a[2] < *a[1]) {
                            a[2] = a[1];
                        }
                        a[1] = nums;
                    }
                }
            }
        }
    }
    if (a[2] == NULL)
        return *a[0];
    else
        return *a[2];
}