Ling-Algorithm-三数之和
167. 两数之和 II - 输入有序数组
用获取信息量来衡量一个算法的效率
暴力解法
**时间复杂度:O(n^2)**,没有利用数据有序的信息
最优解法
时间复杂度:O(n),空间复杂度:O(1)
根据当前指针两个元素相加值判断指针移动,每次判断能得到 n 个信息(大于说明左指针右侧的值都不行,小于说明右指针左侧的值都不行)。
1 | /** |
15. 三数之和
最优解法
排序 O(nlgn),循环 O(n^2)
时间复杂度:O(n^2),空间复杂度:O(1)
先升序排序,固定
x=nums[i]的值,然后左指针指向nums[j](j=i+1),右指针指向nums[k](k=len-1),相加大于0 说明左指针右侧的值都不行,相加小于0 说明右指针左侧的值都不行。注意去重:如果
x+nums[j]+nums[k]===0,循环判断if(nums[j+1]===nums[j])、if(nums[k-1]===nums[k])。「优化点一」:如果
nums[i]+nums[i+1]+nums[i+2]>0,那么往后所有的组合都大于0,直接 break 提前结束
「优化点二」:如果nums[i]+nums[len-1]+nums[len-2]<0,那么nums[i]和其他任意的组合都小于0,continue 从更大的nums[i+1]开始判断
1 | /** |
- Title: Ling-Algorithm-三数之和
- Author: Gabrielle
- Created at : 2026-02-08 08:46:21
- Updated at : 2026-05-12 00:12:41
- Link: https://zoella-w.github.io/2026/02/08/95-Ling-Algorithm-三数之和/
- License: This work is licensed under CC BY-NC-SA 4.0.