Min栈

辅助栈思路
建立两个栈,一个保存数据,一个保存对应位置上的min值;(也可以并到同一个栈);
自定义数据类型
自定义一个带有当前min值得数据,也可以直接用pair容器;

57.对撞双指针证明

  1. class Solution:
  2. def twoSum(self, nums: List[int], target: int) -> List[int]:
  3. i, j = 0, len(nums) - 1
  4. while i < j:
  5. s = nums[i] + nums[j]
  6. if s > target: j -= 1
  7. elif s < target: i += 1
  8. else: return nums[i], nums[j]
  9. return []

如果 s(0,n)当s(0,n)>target: 才有机会相撞;此时要证明右列都不合理:如果s(i,j)>target,则s([i,n],j)都>target;
所以右指针左移到走到s(i,j)<+target,进入下个循环或跳出;
image.png

41.堆排序-优先队列