LeetCodeOJ 3sum

3 篇文章 0 订阅
3 篇文章 0 订阅

题目描述:给定一个整型数组,取任意3个数,只要它们的和满足等于0这个条件就输出出来

题目分析:首先对这个整形数组进行排序,做这样的题一般是先进行排序,然后再进行搜索

                  所以一共有两大步:1.排序2.搜索

首先要进行解释一下,排序之后,数组中的元素是按从小到大的顺序排列起来的,在算法中,我们定义了三个指针,头指针start,尾指针end

游标遍历指针i(自己起的名字);介绍一下start、i、end的取值吧,首先i被初始化为0,所以start肯定从第一位开始,而end = n-1;do  循环体;while(条件);它的语

法是先执行循环体,然后再判断条件是否成立。在end和start变化的同时会引起sum值的变化,同时触发判断条件进行判断进入相应的循环体。


核心思想:游标指针不动,头指针和尾指针进行移动,遍历所有等于0的情况

之后游标指针指向下一个,头指针和尾指针进行移动,遍历所有等于0的情况,

这是最核心的思想。


import java.util.*;
public class Solution{
public List<List<Integer>> threeSum(int[] nums) {


    List<List<Integer>> result = new ArrayList<>();


    int n = nums.length;
    if(n < 3) return result;


    Arrays.sort(nums);


    int i = 0;


    while(i < n - 2)
    {
        int start = i + 1, end = n - 1;
        while(start < end)
        {
            int sum = nums[i] + nums[start] + nums[end];
            if(sum == 0)
            {
                result.add(Arrays.asList(nums[i], nums[start], nums[end]));
                do
                {
                    end--;
                }while(end > start && nums[end] == nums[end + 1]);
                do
                {
                    start++;
                }while(start < end && nums[start] == nums[start - 1]);
            }
            else if(sum > 0)
            {
                do
                {
                    end--;
                }while(end > start && nums[end] == nums[end + 1]);
            }
            else
            {
                do
                {
                    start++;
                }while(start < end && nums[start] == nums[start - 1]);
            }
        }
        do
        {
            i++;
        }while(i < n - 2 && nums[i] == nums[i - 1]);
    }


    return result;
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值