题目大意
https://leetcode.com/problems/3sum-closest/
找出一个数组中三个数之和最接近target的和
题目分析
先将整体排序,复杂度为O(nlogn),然后扫描整个数组,每次循环中,从i之后找两个数,利用双指针的方法,使连带i组成的三个数之和接近target。因此最终复杂度为O(n^2).
https://leetcode.com/problems/3sum-closest/
找出一个数组中三个数之和最接近target的和
先将整体排序,复杂度为O(nlogn),然后扫描整个数组,每次循环中,从i之后找两个数,利用双指针的方法,使连带i组成的三个数之和接近target。因此最终复杂度为O(n^2).
https://leetcode.com/problems/container-with-most-water/
横坐标由0到n-1,纵坐标是高度,问哪两个高度之间再算上它们x轴之间的距离乘积最大,也就是能放更多的水。
朴素的思想是O(n^2)暴力枚举,但这样显然不是这题考察的意图,正确的一个解法是,利用双指针,左指针最开始在0的位置,右指针最开始在n-1位置上,如果左指针比右指针的高度小,那么左指针右移,反之,右指针左移,直至两个指针重合,期间始终更新面积,最后所得即为最大面积。
这种思想的正确性:例如当左指针0的高度小于右指针n-1的高度时,左指针右移一个的代价是:0~n-2,0~n-3…..0~1的面积都没有计算过,但这些面积显然小于0~n-1的面积,因此算法是正确的。
https://leetcode.com/problems/verify-preorder-serialization-of-a-binary-tree/
给以一个字符串,判断它是不是一颗二叉树前序遍历序列化的结果。
先将字符串split成数组,然后利用栈,伪代码如下:
https://leetcode.com/problems/set-matrix-zeroes/
给你一个矩阵,如果矩阵中某个值为0,那么把该行该列值全部赋值为0
题目想让你用额外的O(1)空间复杂度去做,一个巧妙的方法是先遍历矩阵,如果某个值为0,则把此值相同列的第一行元素赋值为0,同时把相同行的第一列元素赋值为0,然后最后做统一的set。但是第一行和第一列的值会被修改,导致不知道第一行或者第一列本来有没有0的元素,因此首先先记下第一行和第一列是否有0元素。在set 0的时候先从第二行,第二列开始set。最后处理第一行和第一列。