本文介绍: 首先对于示例 ,-2.-1,-1,2,4,1,1,1,1,经过排序以后得到 -2.-1,-1,1,1,1.,2,4,1由于此时我们要获取 3 个数,而采用双指针的方式只能探讨两个数的选择,所以我们可以先固定一个数,先用指针 i 指向要固定的数 -1,此时我们只需要在 i 右边的区间内找到两个数,使 nums[ L ] + nums[ R ]= — nums[ i ] 即可。nums[ i ]=nums[ i – 1 ] 时 ,就直接跳过,i++,这样就能保证我们得到的结果不重复。
代码:
题解:
我们要在数组中选出相加为 0 的三个数,要选出符合条件的多个数,我们可以尝试采用先排序,利用有序数组的单调性和双指针的方式解决,推荐先看leetcode LCR 179. 查找总价格为目标值的两个商品(优质解法)
首先对于示例 ,-2.-1,-1,2,4,1,1,1,1,经过排序以后得到 -2.-1,-1,1,1,1.,2,4,1由于此时我们要获取 3 个数,而采用双指针的方式只能探讨两个数的选择,所以我们可以先固定一个数,先用指针 i 指向要固定的数 -1,此时我们只需要在 i 右边的区间内找到两个数,使 nums[ L ] + nums[ R ]= — nums[ i ] 即可
如下图,让指针 L 指向右边区间中最小的数,R 指向右边区间中最大的数,此时 -1+4= 3 > 2,此时得到的数据较大,而 L 指针已经指向了区间中最小的数,所以就要淘汰大的数 4 ,指针 R- –
-2 -1 -1 1 1 1 1 2 4
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。