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

2023-11-05

//给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,
//使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
//注意:答案中不可以包含重复的三元组。
//例如, 给定数组 nums = [-1, 0, 1, 2,1, -1, -4],
//满足要求的三元组集合为:
//[
//  [-1, 0, 1]
//  [-1, -1, 2]
//]
public class EqualZero {
	public static void main(String[] args) {
		int[] nums = { -1, 0, 1, 2, 1,-1, -4 };
		Sort.BubbleSort(nums);// //采用冒泡法为数组从小到大升序排序-4 -1 -1 0 1 2
		Result.getResult(nums);

	}
}

class Sort {// 排序升序序列
	public static void BubbleSort(int[] arr) {
		for (int i = 0; i < arr.length - 1; i++)
			for (int j = 0; j < arr.length - 1 - i; j++)
				if (arr[j] > arr[j + 1]) {
					arr[j] = arr[j] ^ arr[j + 1];
					arr[j + 1] = arr[j] ^ arr[j + 1];
					arr[j] = arr[j] ^ arr[j + 1];
				}
	}
}

class FirstPositive {
	public static int getPostive(int[] arr) {
		for (int i = 0; i < arr.length; i++)
			if (arr[i] > 0)
				return i;
		return -1;
	}
}

class Result {
	public static void getResult(int[] arr) {
		int n = FirstPositive.getPostive(arr);// 返回排好序后判断第一个不为0的整数的下标
		if (n == -1 || n == 0)// 当n=-1说明数组全是负数,当n=0说明全是正数
			System.out.println("该数组没有三个数相加等于零的组合");
		else {// 输出结果
			System.out.println("[");// 格式化

			for (int i = 0; i < n; i++) {// 第一个数一定为负数,所以截至到n
				if (i != 0 && arr[i] == arr[i - 1])// 该处为关键点(去重):判断当前的数是否与前一个相等,
													// 若相等则说明从该数开始的所有可能性已经输出,则跳过该数
					continue;
				else {
					for (int j = i + 1; j < arr.length; j++)
						for (int k = j > n ? j + 1 : n; k < arr.length; k++)// 最后一个数一定是正数,且下标一定比第二个数下标大
							if (arr[k] == arr[k - 1])//判断两次才能保证没有重复的组合
								continue;
							else {
								if (arr[i] + arr[j] + arr[k] == 0) {
									System.out.println("  " + "[" + arr[i] + "," + arr[j] + "," + arr[k] + "]");
								}
							}
				}
			}

			System.out.println("]");
		}

	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Java代码块的基本使用

    概念 在Java中 使用 括起来的代码被称为代码块 局部代码块 位置 方法中定义 特点 执行完就会在内存中消失 作用 限定变量的生命周期 及早释放 提高内存利用率 public static void main String args in
  • Java接口详解

    一 static静态关键字 定义变量不加static关键字 每个对象单独保存一个变量 定义变量加static关键字 静态变量 类变量 共享变量 public static 数据类型 变量名 所有对象会共享该变量 如果一个变量 静态变量 类变
  • Java中参数的传递机制,究竟是值传递还是引用传递?

    先说结论 Java语言中 本质上只有值传递 没有引用传递 废话不说 咱们直接来看例子 public class Demo public static void main String args int i 10 testInt i Syst
  • 数据结构有哪些

    概念 数据结构 数据用什么样的方式组合在一起 数据结构是计算机存储数据的方式 指相互之间存在一种或多种特定关系的数据元素集合 常见数据结构 数据存储的常用结构有 栈 队列 数组 链表和红黑树 栈 stack 又称堆栈 它是运算受限的线性表
  • win下查看 MySQL 数据文件存储位置

    一 在 MySQL 客户端输入以下命令 show global variables like datadir mysql数据文件存储位置定位如下图所示 二 直接到C盘路径下查找 如果查找不到 将隐藏的文件夹显示即可 另外附带 查看mysql
  • jquery循环语句if-else if-else

    jquery循环语句if else if else callbackFun 函数 开始是写的if if else 结果是不管第一个if有没有匹配到 会再次判断 如果匹配到第二个if 则第二个if中的语句执行 没有匹配到第二个if 则else
  • Java-进制转换

    常用的进制转换 十进制转二进制 二进制转十进制 十进制转八进制 八进制转十进制 十进制转十六进制 十六进制转十进制 如果二 八 十六之间想转换可以通过十进制做中间者 import java util Scanner import java
  • JAVA之单元测试:Junit框架

    单元测试 单元测试就是针对最小的功能单元编写测试代码 Java程序最小的功能单元是方法 因此 单元测试就是针对Java方法的测试 进而检查方法的正确性 目前测试方法是怎么进行的 存在什么问题 1 只有一个main方法 如果一个方法的测试失败
  • 【Java编程】图书管理系统

    图书管理系统 我们用一个列表存放书籍信息 private static List
  • JDBC那些事(二)——查询结果集_ResultSet

    接上一篇 JDBC的查询返回值相对复杂一点 所以单独写 上一篇写到stmt excuteUpdate sql 执行结果返回的是int类型的值 此处的sql语句为非查询语句 而如果要执行查询语句则需要使用Statement对象的excuteQ
  • DateFormat setLenient

    SimpleDateFormat df new SimpleDateFormat MMddyyyy With lenient parsing the parser may use heuristics to interpret inputs
  • Java关键字--------final关键字

    final关键字 final关键字表示最终的 不可修改的 final关键字可以用来修饰类 方法和属性 1 final关键字修饰属性 被final关键字修饰的属性的值和类型都不能再改变 就属于常量 只能做一次赋值 被final修饰的属性通常与
  • 8421码

    8421码是中国大陆的叫法 8421码是BCD代码中最常用的一种 在这种编码方式中每一位二值代码的1都是代表一个固定数值 把每一位的1代表的十进制数加起来 得到的结果就是它所代表的十进制数码 二进制 1 1 1 1 十进制 8 4 2 1
  • 包装类自动装箱和拆箱原理

    包装类的自动装箱和自动拆箱 包装类的自动装箱和拆箱是JDK1 5的新特性 一 首先 了解自动装箱的过程 有两种自动装箱过程 第一种 128 127 之内 调用相应包装类的valueOf 例如 Integer i 12 Integer a 2
  • JAVA高级类特性(一)

    一 继承性 1 继承的使用 权限修饰符 class A extends B 2 子类 A 父类 基类 SuperClass B 3 子类继承父类后 父类中声明的属性 方法 子类都可以获取到 明确 当父类中有私有的属性或方法时 子类同样可以获
  • Java中对象比较的三种方式

    一 针对对象值是否相等的比较 和 equals 的区别 当我们提到比较值的时候 大多数人都会想到 因为在一般情况下 人们对于比较的概念中 数字比较的应用场景出现频率是最多的 首先我们创建一个类 之后新建这个类的对象来进行比较验证 class
  • Scanner类用法(学习笔记)

    Scanner类用法 学习笔记 后续会补充 1 next 用法 package com yushifu scanner import java util Scanner util java工具包 Scanner类 获取用户的输入 Scann
  • Java的多态特性

    学习笔记 多态 简单说 就是一个对象对应着不同类型 多态在代码中的体现 父类或者接口的引用指向其子类的对象 多态的好处 提高可维护性 由多态前提所保证 提高了代码的扩展性 多态的弊端 无法直接访问子类特有的成员 也就是说前期定义的内容不能使
  • Java之单元测试(JUnit单元测试框架)

    一 概述 单元测试就是针对最小的功能单元编写测试代码 Java程序最小的功能单元是方法 所以单元测试就是针对Java方法的测试 进而检查方法的正确性 常规测试有什么问题 只有一个main方法 如果一个方法的测试失败了 其他方法会受到影响 无
  • java 使用匿名内部类的方式创建线程并设置和获取线程名字

    有些方法需要传入接口的实例或者抽象类的实例对象 比如Thread有一个构造方法 Thread Runnable target 这时可以可以自定义类实现Runnable接口 重写接口中的方法 将自定义类的对象传入构造方法中 也可以使用匿名内部

随机推荐

  • 北京理工大学:《Python语言程序设计》详细笔记

    第一章 程序设计基本方法 计算机与程序设计 计算机是根据指令操作数据的设备 计算机发展参照摩尔定律 表现为指数形式 编译和解释 计算机执行源程序两种方式 编译和解释 编译 将源代码一次性转换成目标代码的过程 执行编译过程的程序叫编译器 co
  • C#是不是不能把基类对象强转成它派生类对象

    转载请标明是引用于 http blog csdn net chenyujing1234 有补充的 请大家指出 最近在论坛上看到有网友问到C 中对象强转的问题 自己虽然接触过C 但对这个特性还是第一次接触 所以这里找到一些资料与大家一起分享
  • unity 模仿原神的人物移动和镜头变换

    unity 模仿原神人物移动和镜头转换 自学了几周unity了 感觉还是要做点什么上手才快 所以先做个简单的RPG游戏吧 然后很快就做出了CS那种第一人称视觉的人物操控 不过感觉体验不太好 不能边走边看周围 所以重新模仿了原神那种可以环绕人
  • 3D建模教程分享

    全套3D建模教程让你从小白到大神 工欲善其事必先利其器 目前主流的3D建模软件当然是3DMAX MAYA还有ZBrush了 开始学习之路前这三个软件肯定是必备的 欢迎大家加入Q裙 939901947 领取各种学习资料和软件 迈出成为大神的第
  • linux系统创建新用户

    一般情况下linux系统创建 删除新用户主要有以下几种方式 1 创建新用户 useradd 用户名 删除用户 userdel 用户名 2 sudo useradd m 用户名 删除用户 sudo userdel r 用户名 可以直接删掉用户
  • 联想笔记本插入耳机仍外放--解决方式

    1 打开控制面板 2 点击硬件和声音 3 点击realtek音频管理器 4 点击设备高级设置 5 选中第二项 6 点击确定 关闭所有窗口即可解决该问题
  • 数学在机器学习中的重要性

    数学在机器学习中的重要性 by Dahua Lin Linear Algebra 线性代数 和 Statistics 统计学 是最重要和不可缺少的 这代表了Machine Learning中最主流的两大类方法的基础 一种是以研究函数和变换为
  • 使用BOTO进行S3各种操作

    使用BOTO进行S3各种操作 BOTO是一个开源的PYTHON发布包 是AWS AMAZON WEBSERVICE 的PYTHON封装 近期 我们公司用到国内某知名公司的S3云存储服务 需要调用该公司提供的S3 PYTHON SDK 鉴于该
  • Java连接MySQL数据库(多种连接方法)

    当我们掌握Java的基础知识后就可以学习一些Java的高级技术 或特性 了 例如 集合 多线程 网络编程 数据库技术 并发等等 其中数据库技术在Java的学习中也是相当重要的 今天就简单介绍一下Java与MySQL数据类的 1 提前准备 下
  • 亚马逊云科技实时 AI 编程助手 Amazon CodeWhisperer,开发快人一步!

    Amazon CodeWhisperer 是一款 AI 编码配套应用程序 可在 IDE 中生成整行代码和完整的函数代码建议 以帮助您更快地完成更多工作 在本系列文章中 我们将为您详细介绍 Amazon CodeWhisperer 的相关信息
  • 传输层——TCP报文头介绍

    16位源端口号 16位目的端口号 32位序列号 32位确认序列号 4位头部长度 保留6位 U R G A C K P S H R S T S Y N F I N 16位窗口大小 16位检验和 16位紧急指针 可选项 数据 源端口 长度为16
  • flex布局(骰子布局)

    1 应该都知道使用VS来敲写页面的第一步就是新建文件夹 也可以建文件夹 这是指只有html没有css与js才可以的 然后 可以在VS中打开文件夹 也可以直接把文件夹拖进去 这有两种方法 任意一种就行了 建议你直接拖进去 因为方便 2 这次的
  • Apache配置文件httpd.conf的理解

    httpd conf 是Apache使用的主要配置文件 1 文件位置 一般在 C wamp64 bin apache apache2 4 51 conf 2 是注释符号 1 解释每一指令的作用 2 指令模板 有时去掉 就能使用 3 Unix
  • Surprise库使用总结

    文章目录 Surprise库 1 加载数据模块 2 模型训练前的数据划分模块 2 1 交叉验证数据划分 2 2 训练集测试集划分 3 构建算法模块 3 1 记号说明 3 2 基于统计的算法 3 3 基于近邻 协同过滤 的方法 3 3 1 相
  • stata回归?固定效应模型(组内变换OR LSDV最小二乘法)

    面板数据分析与Stata应用笔记整理自慕课上浙江大学方红生教授的面板数据分析与Stata应用课程 笔记中部分图片来自课程截图 笔记内容还参考了陈强教授的 高级计量经济学及Stata应用 第二版 一 面板数据的定义 面板数据 panel da
  • 笔记本左Ctrl键失灵

    这两天发现笔记本的左Ctrl键单按失灵 无法使用快捷键 很是麻烦 一开始以为按键坏了 打算去官方店维修 但使用在线网站测试 先按其余任意按键的同时 再按左Ctrl 它有反应 可以使用在线键盘测试 zFrontier 装备前线对键盘按键进行在
  • vben admin框架 useForm 时间选择器 开始时间,结束时间解析.懒人方法

    因为搜索部分需要一个创建时间范围 因为DatePicker返回的是一个数组 开始自己在useTable 中的beforeFetch中拦截请求 然后解析参数 重组参数 这样有好多表格组件的时候 就需要写多个beforeFetch 然后闲来无事
  • 《新程序员002》图书正式上市! 从“新数据库时代”到“软件定义汽车”

    20年前 伴随着互联网打开信息化大门 技术人成为新时代的开拓者 在时代的召唤下 CSDN于2001年推出国内首个面向IT人员的专业杂志 程序员 成为一代代开发者的技术启蒙 20年后的今天 人工智能 云计算 大数据等新兴技术被赋予撬动新一轮产
  • 最有效的方法来增加在Map中的值

    关于这个是在一个博客上看到的 就像试一下 测试结果出人意料 看到这个标题可能还是觉得有点抽象 那么首先来一段代码 int count map containsKey string map get string 0 map put strin
  • 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

    给定一个包含 n 个整数的数组 nums 判断 nums 中是否存在三个元素 a b c 使得 a b c 0 找出所有满足条件且不重复的三元组 注意 答案中不可以包含重复的三元组 例如 给定数组 nums 1 0 1 2 1 1 4 满足