zoukankan      html  css  js  c++  java
  • 三数之和

    此博客链接:https://www.cnblogs.com/ping2yingshi/p/14141757.html

    三数之和

    题目链接:https://leetcode-cn.com/problems/3sum/ 。

    题目

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

    注意:答案中不可以包含重复的三元组。

    示例:

    给定数组 nums = [-1, 0, 1, 2, -1, -4],

    满足要求的三元组集合为:
    [
    [-1, 0, 1],
    [-1, -1, 2]
    ]

    题解

    思路

    先对数组排序,然后从头开始取数组的元素当成第一个数,然后使用双指针来记录另外两个元素的值,判断三个数的和是否为0.

    方法

    1.排序

    2.遍历数组

    3.找边界条件(当第一个数大于0时,后面相加就不可能为0,如果三数之和比0小,说明需要把左边的数向右移动,如果三数之和比0大,则说明有变右边的数需要向左移动)

    4.注意:去重。这里的去重需要对三个数都进行去重。

    代码

    
    
    class Solution {
        public List<List<Integer>> threeSum(int[] nums) {
            Arrays.sort(nums);
            List<List<Integer>> result = new ArrayList();
            for(int i=0;i<nums.length;i++){
                int l=i+1;
                int r=nums.length-1;
                if(nums[i]>0)
                    break;
                if(i==0||(nums[i]!=nums[i-1])){
                   while(l<r){
                       if(nums[r]+nums[l]+nums[i]==0) 
                       {
                           result.add(Arrays.asList(nums[i], nums[l], nums[r]));
                           while(l<r&&nums[l]==nums[l+1])
                               l++;
                           while(l<r&&nums[r]==nums[r-1])
                               r--;
                            l++;
                            r--;         
                       }
                       else if(nums[r]+nums[l]+nums[i]<0)
                          l++;
                       else
                          r--;
                   }
                }
            }
            return result;
        }
    }

    结果

    出来混总是要还的
  • 相关阅读:
    导航属性
    提笔忘字
    JavaScript学习总结(一)——闭包、对象、函数
    CSS3新特性(阴影、动画、渐变)
    图片轮播(也可以通过点击下标播放对应的图片)
    CSS3与页面布局学习总结——多种页面布局
    多种居中方法
    二级菜单
    无间隙轮播图片
    模块和程序处理
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14141757.html
Copyright © 2011-2022 走看看