三数之和(c++):
法一(排序+双指针):首先,创建已给新的数组ans。将原数组按小到大从左往右先排序,得数组长度n,再用for循环开始操作。设出第一个位置于数组初i,为了不让数重复,用if来判断若前一个和后一个数相等就跳过第一循环的操作,若不等,即确定了第一个数,接着设出一个目标值target等于已确定的第一个数的相反数,来套住后两个数,设第三个数为数组末k=n-1。接着,就是两数之和的做法,第二个for循环,确定除第一个已确定数之外的第二个数j=i+1,又如上述操作确定第二个数;然后用while循环表示第三个数,用if判断,若第二个数加第三个数大于目标值,则k左移,j不动;若小于,则j右移,k不动;若等于,即可赋值给ans数组。最后返回ans数组即可。
我:因为刚做过两数之和,就有了和它类似的思路,用了个三重for循环。设出一个初始位置于数组首i开始for循环 ,接着第二个位置j=i+1来第二个循环,然后第三个位置k=j+1来第三个循环 (我想这样它们的位置就不一样了),最后用if判断这三数之和等于0,就可以返回它们的值即可。但运行后发现返回的位置编译错误;看了题解找返回方法,就是创建一个新的数组来返回(新),结果是错的,也不全错,就错第一个例子的结果,这个例子中有重复的数,所以输出来后就有重复的数组,怎么解决?......仔细看提哈,并没有返回位置那种要求位置紧的,可以先排序呀,看得重新规划了。
学:c++创建一个数组【vector<vector<int>> nums;】,
及其返回【nums.push_back({});]