算法打卡十二

三数之和(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({});]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值