Leetcode--15. 三数之和

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

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

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

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

思路:双指针法

要求的是a+b+c=0

1.首先可以先排序(O(nlogn)),这样保证数组有序之后可以利用大小关系判断。

2.设置两个指针start、end,分别从左边以及右边向中间遍历,如果找到a+b+c==0,那么可以将这个答案加入到答案集里 如果a+b+c<0,此时固定的是c,说明a+b太小了,因此start+=1;如果a+b+c>0,此时a+b过大,因此end-=1

3.去重,这一步则是利用了有序性,如果两个数相同,那他们在数组的位置一定是相邻的(连着几个数相同也是可能的),因此 去重的操作就能简单遍历一下相邻的是否相同即可。由于数组有序性使得去重这一步很简单,因此也可以看出第一步的作用。

提交的代码:

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        int i,start=1,end=nums.length-1;
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        for(i=0;i<nums.length-2;i++)
        {
            if(i > 0 && nums[i] == nums[i-1]) continue; //去重
            start=i+1;
            end=nums.length-1;
            while(start<end)
            {
                if(nums[i]+nums[start]+nums[end]>0)
                {
                    end--;
                }
                else if(nums[i]+nums[start]+nums[end]<0)
                {
                    start++;
                }
                else
                {
                    List<Integer> list = new ArrayList<Integer>();
                    list.add(nums[i]);
                    list.add(nums[start]);
                    list.add(nums[end]);
                    result.add(list);
                    while (start<end && nums[start] == nums[start+1]) start++; // 去重
                    while (start<end && nums[end] == nums[end-1]) end--; // 去重
                    start++;
                    end--;
                }
            }
        }
        return result;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

他们提出了一个大胆的猜想:GWT(深度学习)→通用人工智能

来源&#xff1a;AI科技评论编译 &#xff1a;陈彩娴近日&#xff0c;有一篇发表在arXiv的论文“Deep Learning and the Global Workspace Theory”提出了一个大胆的猜想&#xff08;或理论&#xff09;。两位作者认为&#xff0c;当下的深度学习已经可以基于一个意识模型&…

python调用jar 性能_亲自有效---python 调用jar

#-*-coding:utf-8-*-import jpypefrom jpype import *import os.pathjarpath os.path.abspath(‘.‘)#这个函数用来获取当前 python 脚本所在的绝对路径aajarpath ‘\JpypeDemo.jar‘print(aa)jvm_path jpype.getDefaultJVMPath() #获取当前系统JDK的路径print(jvm_path)# s…

计算机网络-奈氏准则

假定某信道受奈氏准则限制的最高码元速率为20000码元/秒。如果采用振幅调制&#xff0c;把码元的振幅划分为16个不同等级来传送&#xff0c;那么可以获得多高的数据率&#xff08;b/s&#xff09;?答&#xff1a;CR*Log2&#xff08;16&#xff09;20000b/s*480000b/s (C是速据…

Leetcode--80. 删除排序数组中的重复项Ⅱ

给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素最多出现两次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums [1,1,1,2…

科学史上那些盛极一时的“著名理论”是如何被攻破的?

《雅典学院》名画中的亚里士多德和柏拉图来源 :《自然》百年科学经典制版编辑: Morgan在科学发展的过程中&#xff0c;曾经涌现出不少盛极一时而后被证明是错误的理论。这些理论有的也许在今天看来悖谬荒诞&#xff0c;但是从整个科学发展的过程来看&#xff0c;它们仍然有其作…

Cluster - LB - haproxy

sd 转载于:https://www.cnblogs.com/aftree/p/9219435.html

Leetcode--1004. 最大连续1的个数Ⅲ

给定一个由若干 0 和 1 组成的数组 A&#xff0c;我们最多可以将 K 个值从 0 变成 1 。 返回仅包含 1 的最长&#xff08;连续&#xff09;子数组的长度。 示例 1&#xff1a; 输入&#xff1a;A [1,1,1,0,0,0,1,1,1,1,0], K 2 输出&#xff1a;6 解释&#xff1a; [1,1,1…

java 按钮 颜色_改变按钮颜色的java事件,个人成果!

import java.awt.*;import java.awt.event.*;public class Eventest{Button btn1new Button("单击");Frame myframenew Frame("测试单击事件");public void init(){btn1.setSize(30,26);btn1.addActionListener(new ActionListener(){public void actionPe…

AI在智能建筑中的应用和发展

来源&#xff1a;中研网图片来源&#xff1a;网络智能建筑诞生于二十世纪末&#xff0c;第一幢智能建筑于1984年在美国哈特福德 &#xff08;Hartford&#xff09;市建成。我国于90年代才起步&#xff0c;但迅猛发展势头令世人瞩目。目前&#xff0c;新技术、新产品在智能建筑中…

SpringBoot核心

1.基本配置 1.1入口类和SrpingBootApplication SpringBoot通常有一个名为*Application的入口类&#xff0c;入口类里有一个main方法&#xff0c;这个main方法就是一个标准的java应用的入口方法 。在main方法中使用SpringApplication.run,启动springboot项目。 其中EnablieAutoC…

grpc简单使用 java_gRPC学习记录(四)-官方Demo - Java 技术驿站-Java 技术驿站

了解proto3后,接下来看官方Demo作为训练,这里建议看一遍之后自己动手搭建出来,一方面巩固之前的知识,一方面是对整个流程更加熟悉.官方Demo地址: https://github.com/grpc/grpc-java例子是一个简单的路由映射的应用&#xff0c;它允许客户端获取路由特性的信息&#xff0c;生成…

冯端:漫谈物理学的过去、现在与未来

来源&#xff1a; 算法与数学之美撰文&#xff1a; 冯端 (南京大学物理系)“物理学的过去、现在和未来”是一个非常大而且重要的题目&#xff0c;也是一个非常难讲的题目&#xff0c;特别是涉及物理学的未来&#xff0c;结果往往是贻笑大方。这里以历史的透视为主线&#xff0c…

Leetcode--713. 乘积小于k的子数组

给定一个正整数数组 nums。 找出该数组内乘积小于 k 的连续的子数组的个数。 示例 1: 输入: nums [10,5,2,6], k 100 输出: 8 解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。 需要注意的是 [10,5,2] 并不是乘积小于100的子数…

第四次博客

第四次博客 一、测试与正确性论证的比较 测试具有针对性&#xff0c;能从一些方面完美的展现出代码的正确性&#xff0c;但是它的验证度取决于样例的质量。 优点是方便&#xff0c;快捷&#xff0c;结果明显&#xff1b;缺点是可能不会覆盖到方方面面。 正确性论证能从所有的方…

院士论坛|李德仁:测绘遥感能为智能驾驶做什么? ——论测绘遥感与智能驾驶

来源&#xff1a; 中国测绘学会未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业…

java 每行打印五个数字_java代码练习======每隔5行打印数字

总结&#xff1a;当我们感觉数字排列横排&#xff0c;竖排不好看的时候&#xff0c;学会空几行在排列&#xff0c;哎呦&#xff0c;效果不错喔package com.aa;public class West2 {public static void main(String[] args) {int count 0;for (int i 0; i < 100; i) {// 每…

Leetcode--455. 分发饼干

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i &#xff0c;都有一个胃口值 gi &#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j &#xff0c;都有一个尺寸 sj 。…

Spring Boot-springbootHelloword(一)

什么是springboot sprng家族一个全新的框架 简化我们应用程序的创建和开发的过程&#xff0c;使用默认配置简化了我们以前传统的配置 springboot的特性 能够快速创建spring程序能够使用java main方法启动内嵌的 tomcat 或者jetty服务器运行spring boot程序提供约定的starter p…

java实践项目_Java项目开发实践

第章项目开发基础()项目开发实训目标()实训知识目标()实训能力目标()实训素质目标()项目开发技术()图形用户界面编程技术()输入输出编程技术()网络编程技术()数据结构编程技术()绘图编程技术()数据库编程技术()本书各项目采用技术()项目开发工具()开发工具包()数据库系统()()()…

Leetcode--134. 加油站

在一条环路上有 N 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 如果你可以绕环路行驶一周&#…