7.《双指针篇》---⑦三数之和(中等偏难)

题目传送门

方法一:双指针

1.新建一个顺序表用来返回结果。并排序数组。

2.for循环 i 从第一个数组元素遍历到倒数第三个数。

3.如果遍历过程中有值大于0的则break;

4.定义左右指针,以及target。int left = i + 1, right = n - 1; int target = -nums[i];

5.类似两数之和。比较int sum = nums[l] + nums[r] 与 target的大小

注意:

1.不能返回重复的数组。因此我们还需要排除重复的。

2.排序之后。在sum = target的时候。我们进行 left 和 right的排重。

3.在 i++ 之后我们进行 num[i] 这个元素的排重。

注意:

排重的时候双指针排重记得 left < right。并且num【i】排重的时候注意 i<n-1。

java 复制代码
class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> ret = new ArrayList<>();
        Arrays.sort(nums);
        int n = nums.length-1;

        for(int i = 0; i < n-1; ){
            if(nums[i] > 0){
                break;
            }
            int left = i + 1;
            int right = n;
            int target = -nums[i];

            while(left < right){
                int sum = nums[left] + nums[right];
                if(sum == target){
                    ret.add(new ArrayList<Integer>(Arrays.asList(nums[i],nums[left],nums[right])));
                    left++;
                    right--;
                    while(left < right && nums[left] == nums[left-1]){
                        left++;
                    }
                    while(left < right && nums[right] == nums[right+1]){
                        right--;
                    }

                }else if(sum < target){
                    left++;
                }else{
                    right--;
                }
            }
            i++;
            while(i<n-1 && nums[i] == nums[i-1]){
                i++;
            }

        }
        return ret;
    }
}

复杂度分析

相关推荐
Fr2ed0m14 分钟前
卡尔曼滤波算法原理详解:核心公式、C 语言代码实现及电机控制 / 目标追踪应用
c语言·人工智能·算法
Sapphire~20 分钟前
重学JS-012 --- JavaScript算法与数据结构(十二)正则表达式
javascript·数据结构·算法
Yupureki32 分钟前
从零开始的C++学习生活 20:数据结构与STL复习课(4.4w字全解析)
c语言·数据结构·c++·学习·visual studio·1024程序员节
一念&43 分钟前
每日一个C语言知识:C 错误处理
c语言·开发语言·算法
FMRbpm1 小时前
顺序表vector--------练习题3题解
数据结构·c++·新手入门
buyue__1 小时前
C++实现数据结构——线性表
数据结构·c++
丁浩6662 小时前
统计学---2.描述性统计-参数估计
人工智能·算法
sali-tec3 小时前
C# 基于halcon的视觉工作流-章54-N点标定
开发语言·图像处理·算法·计算机视觉·c#