返回

Python 解析 LeetCode 2148:计算仅比自身小/大一个元素的元素数量

后端

Python 解析 LeetCode 2148:计算仅比自身小/大一个元素的元素数量

题目

给定一个整数数组 nums,请您找出数组中仅比自身小/大一个元素的元素数量。

示例 1:

输入:nums = [1,2,3,4,5]
输出:3
解释:
- 2  1 小一个元素,比 3 大一个元素。
- 3  2 小一个元素,比 4 大一个元素。
- 4  3 小一个元素,比 5 大一个元素。

示例 2:

输入:nums = [1]
输出:0
解释:没有符合要求的元素。

思路分析

这道题考察的是基本的排序算法,只要理清思路就基本上能做出来。我们首先对数组 nums 进行排序,排序后的数组就变成了一个升序数组。然后我们遍历这个升序数组,对于每个元素 nums[i],我们分别检查其左边和右边的元素 nums[i-1] 和 nums[i+1] 是否满足题目要求。如果满足,我们就将计数器加 1。最后返回计数器的值即可。

代码实现

def count_elements(nums):
  """
  计算仅比自身小/大一个元素的元素数量

  :param nums: 输入的整数数组
  :return: 仅比自身小/大一个元素的元素数量
  """

  # 对数组进行排序
  nums.sort()

  # 计数器,用于记录符合要求的元素数量
  count = 0

  # 遍历排序后的数组
  for i in range(1, len(nums) - 1):
    # 检查左边元素是否满足要求
    if nums[i] - nums[i-1] == 1:
      count += 1
    # 检查右边元素是否满足要求
    if nums[i+1] - nums[i] == 1:
      count += 1

  # 返回计数器的值
  return count

# 测试代码
nums = [1,2,3,4,5]
print(count_elements(nums))  # 3

nums = [1]
print(count_elements(nums))  # 0

复杂度分析

  • 时间复杂度:O(n log n),其中 n 是数组 nums 的长度。排序算法的时间复杂度为 O(n log n),遍历排序后的数组的时间复杂度为 O(n)。

  • 空间复杂度:O(1),因为我们没有使用额外的空间来存储数据。

总结

这道题考察的是基本的排序算法,只要理清思路就基本上能做出来。我们通过对数组进行排序,然后遍历排序后的数组,就可以轻松地找到符合题目要求的元素数量。