返回
Python 解析 LeetCode 2148:计算仅比自身小/大一个元素的元素数量
后端
2024-01-09 15:40:15
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),因为我们没有使用额外的空间来存储数据。
总结
这道题考察的是基本的排序算法,只要理清思路就基本上能做出来。我们通过对数组进行排序,然后遍历排序后的数组,就可以轻松地找到符合题目要求的元素数量。