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;
        }
    }

    结果

    出来混总是要还的
  • 相关阅读:
    .Net/C# 应用程序直接读取本地 Cookies 文件(WinXP SP2 调用 API: InternetGetCookie 无果)
    wininet.dll函数库:不会过期的cookie
    WinForm中TextBox控件循环自动滚动示例
    JScript中Date.getTime转.Net中的DateTime
    js gettime c# ticks
    mysql查看整库个表详情
    rds分区实践
    mysql5.7.21源码安装
    EXPLAIN详解
    C#基础温习(4):C#中string数组和list的相互转换
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14141757.html
Copyright © 2011-2022 走看看