不重复打印排序数组中相加和为给定值的所有二元组和三元组

本文主要是介绍不重复打印排序数组中相加和为给定值的所有二元组和三元组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//不重复打印排序数组中相加和为给定值的所有二元组和三元组
public class GetArrNum{//(1)获得排序数组中为给定值的二元组public static void GetArrNum2(int []arr,int k){if(arr==null||k<arr[0]||arr.length<2){return;}//设置两个指针int i=0;int j=arr.length-1;for(int w=0;w<arr.length;w++){if((arr[i]+arr[j]==k)&&(i!=j)){System.out.println(arr[i]+" "+arr[j]);j--;}else if(arr[i]+arr[j]>k){break;}else{i++;}	}System.out.println();}//(2)获得排序数组中为给定值的三元祖public static void GetArrNum3(int[]arr,int k){ if(arr==null||k<arr[0]||arr.length<3){return;}//设置两个指针int i=0;while(i!=arr.length-3){for(int j=arr.length-1;j>=3;j--){for(int w=i+1;w<arr.length-1;w++){if(arr[i]+arr[j]+arr[w]==k&&((w<j))&&(i<j)){System.out.println(arr[i]+" "+arr[w]+" "+arr[j]);}else if(arr[i]+arr[j]+arr[w]>k){break;}}}i++;}System.out.println();}//(2)获得排序数组中为给定值的三元祖 方法二O(N*N)public static void GetArrNum3T(int[] arr, int k) {if (arr == null || arr.length < 3) {return;}for (int i = 0; i < arr.length - 2; i++) {if (i == 0 || arr[i] != arr[i - 1]) {printRest(arr, i, i + 1, arr.length - 1, k - arr[i]);}}}public static void printRest(int[] arr, int f, int l, int r, int k) {while (l < r) {if (arr[l] + arr[r] < k) {l++;} else if (arr[l] + arr[r] > k) {r--;} else {if (l == f + 1 || arr[l - 1] != arr[l]) {System.out.println(arr[f] + "," + arr[l] + "," + arr[r]);}l++;r--;}}}public static void main(String[]args){int[]arr={-8,-4,-3,0,1,2,4,5,8,9};int k=10;GetArrNum2(arr,k);GetArrNum3(arr,k);GetArrNum3T(arr,k);}
}


这篇关于不重复打印排序数组中相加和为给定值的所有二元组和三元组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082471

相关文章

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问