[24年秋招 | Funplus笔试第二题] 数组内第二大数

RoLingG 算法 2024-09-21

24年秋招趣加笔试第二题 数组内第二大值

这题仅限C++,太久没用C++了,我是猪鼻。

Go语言版本:

直接遍历就完事了
func findSecondMax(nums []int) int {
    if len(nums) < 2 {
        return -1 // 数组元素少于2个时,返回-1表示没有第二大的值
    }

    max := nums[0]
    secondMax := -1

    for _, num := range nums {
        if num > max {
            secondMax = max // 更新第二大值
            max = num       // 更新最大值
        } else if num > secondMax && num != max {
            secondMax = num // 更新第二大值
        }
    }

    if secondMax == -1 {
        return -1 // 如果没有找到第二大值,则返回-1
    }
    return secondMax
}

测试用例:

func main() {
    nums := []int{1, 2, 3, 4, 5}
    fmt.Println("The second max value is:", findSecondMax(nums))
}

C++版本:

貌似和Go也没差
#include <iostream>
#include <vector>

int findSecondMax(vector<int>& nums) {
    if (nums.size() < 2) {
        return -1; // 数组元素少于2个时,返回-1表示没有第二大的值
    }

    int max = nums[0]; // 初始化最大值为数组的第一个元素
    int secondMax = nums[0]; // 初始化第二大值为数组的第一个元素

    for (int i = 1; i < nums.size(); ++i) {
        if (nums[i] > max) {
            secondMax = max; // 更新第二大值
            max = nums[i];    // 更新最大值
        } else if (nums[i] > secondMax && nums[i] != max) {
            secondMax = nums[i]; // 更新第二大值
        }
    }

    if (secondMax == max) {
        return -1; // 如果没有找到第二大值,则返回-1
    }
    return secondMax;
}

测试用例:

int main() {
    vector<int> nums = {1, 2, 3, 4, 5};
    int secondMax = findSecondMax(nums);
    if (secondMax != -1) {
        cout << "The second max value is: " << secondMax << endl;
    } else {
        cout << "There is no second max value." << endl;
    }
    return 0;
}
PREV
[24年秋招 | Funplus笔试第一题] 扑克牌顺子
NEXT
[Kafka] 高可用实例

评论(0)

发布评论