Leetcode 5 15 98 138解题记录
文章目录 15 3Sum 98 验证二叉搜索树 5 最长回文子串 138 拷贝带有随机指针的链表 刷top-100的题目,最近做了这四道,原题: 138 , 5 , 15 , 98 . 15 3Sum 给你一串整数,让你找里面所有和为0的三元组。 思路 : 暴力的话三循环,时间复杂度高。可以考虑先求任意两个数的和 a ,然后找剩下的数中值为 -a 的元素,但是复杂度依旧很高。考虑先确定一个数 b ,那么接下来的任务就是找和为 -b 的两个数,这个任务可以通过双指针法实现 - 排序然后从头部和尾部向中间靠拢。举个例子 设数组 a[9]={-5 0 1 1 2 3 3 4 4} ,求 1 ~ 9 中和为 5 的二元组: 双指针 i=1, j=8 ,结果集 res 若 a[i]+a[j] == t ,则将这个二元组放入 res ,并将 i++, j++ 若 a[i]+a[j] < t ,则 i++ 若 a[i]+a[j] > t ,则 j++ 重复上述操作直到 i>=j 上述过程会产生重复的元组 (1,4) ,产生的原因是相同的元素多次计算了,那只需在每次执行 i++ 或 j++ 时,跳过相同的元素即可。 代码: vector < vector < int >> threeSum ( vector < int > & nums ) { if ( nums . size ( ) < 3 )