📜  门| GATE CS Mock 2018 |设置 2 |第 61 题(1)

📅  最后修改于: 2023-12-03 14:58:22.438000             🧑  作者: Mango

门 | GATE CS Mock 2018 | 设置 2 | 第 61 题

这是一道 GATE 计算机科学模拟考试的题目,题号为 61 题。本题是在设置2中的一道编程题目,主要涉及算法和数据结构的知识。

题目描述

给定一个整数数组 arr,编写一个函数来找到数组中第二小的元素,并将其返回。如果不存在第二小的元素,则返回 -1。

函数签名
def second_smallest(arr: List[int]) -> int:
    pass
输入
  • arr:整数数组
    • 长度: 2 <= len(arr) <= 10^5
    • 数组中的值: -10^9 <= arr[i] <= 10^9,arr[i]不会重复
输出
  • 返回整数类型的第二小的元素值,如果不存在则返回 -1。
例子
输入
arr = [5, 2, 3, 6, 4]
输出
2
解题思路

通常解决此类问题的有效方法是首先对数组进行排序,然后返回排序后的第二个元素。

  1. 先对输入的 arr 进行排序,升序排列。
  2. 检查数组的长度,如果长度小于2,则返回 -1。
  3. 返回排好序的数组的第二个元素,即 arr[1]
代码实现
from typing import List

def second_smallest(arr: List[int]) -> int:
    arr.sort()  # 对数组进行排序
    if len(arr) < 2:
        return -1
    return arr[1]

这是一个简单的实现,只需要对数组进行排序并返回第二个元素。算法的时间复杂度为 O(nlogn),其中 n 是数组的长度。

测试
assert second_smallest([5, 2, 3, 6, 4]) == 2
assert second_smallest([3, 8, 1, 10]) == 3
assert second_smallest([10, 20]) == 20
assert second_smallest([7, 7, 7, 7]) == -1
assert second_smallest([-5, -2, -3]) == -3

这些测试例子覆盖了各种情况,包括正整数、负整数、数组长度为2、数组中有相同元素等情况。

总结

通过这道题目,加深了对排序算法和数组操作的理解。这是一道简单的算法题,但在 GATE 考试中出现频率较高,并且可以帮助提高对基本算法和数据结构的理解。