递增三元组python
时间: 2025-05-10 10:34:29 浏览: 12
### 方法概述
生成递增的三元组序列可以通过多种方法实现。以下是几种常见的解决方案:
#### 方案一:基于双指针和动态规划的思想
这种方法的核心在于维护两个变量 `first` 和 `second`,分别记录当前找到的第一个较小值和第二个中间值。当遍历到第三个较大的值时,则返回真。
```python
class Solution:
def increasingTriplet(self, nums: list[int]) -> bool:
first = second = float('inf')
for num in nums:
if num <= first:
first = num # 更新第一个较小值
elif num <= second:
second = num # 更新第二个中间值
else:
return True # 找到了递增的三元组
return False
```
此代码的时间复杂度为 O(n),空间复杂度为 O(1)[^2]。
---
#### 方案二:暴力枚举法
通过三层循环逐一检查是否存在满足条件的三元组 `(a[i], a[j], a[k])`,其中 `i < j < k` 并且 `a[i] < a[j] < a[k]`。
```python
def count_increasing_triplets(nums):
n = len(nums)
result = []
for i in range(n):
for j in range(i + 1, n):
for k in range(j + 1, n):
if nums[i] < nums[j] < nums[k]:
result.append((nums[i], nums[j], nums[k]))
return result
```
虽然该方法简单易懂,但由于其时间复杂度为 O(n³),因此仅适用于规模较小的数据集[^3]。
---
#### 方案三:优化后的中心点查找法
对于每一个可能成为“中心”的元素 `data[j]`,向前寻找是否有更小的值 (`hasSmall`),向后寻找是否有更大的值 (`hasBig`)。如果两者都存在,则表明这是一个有效的递增三元组。
```python
def find_center_of_triplet(data):
ans = []
n = len(data)
for j in range(1, n - 1):
hasSmall = any(data[i] < data[j] for i in range(j))
hasBig = any(data[j] < data[k] for k in range(j + 1, n))
if hasSmall and hasBig:
ans.append(data[j])
return ans
```
上述逻辑能够有效定位所有潜在的“中心”位置,并进一步扩展至完整的三元组集合[^4]。
---
### 总结
以上三种方式各有优劣,在实际应用中需根据具体场景选择合适的技术路线。通常推荐优先考虑效率较高的前两种策略;而对于教学演示或者小型数据测试来说,第三种直观明了的方式也不失为一种不错的选择。
阅读全文
相关推荐


















