查找数组中3个相加和为零的元素
来源:互联网 发布:mac eclipse 调试 fn 编辑:程序博客网 时间:2024/06/04 08:24
输入 : arr[] = {0, -1, 2, -3, 1}输出: 0 -1 1 2 -3 1输入: arr[] = {1, -2, 1, 0, 5}输出: 1 -2 1
解法1(简单时间复杂复杂度O(n^3)空间复杂度O(1))
public static void findTriplets(int arr[], int n){ for(int i=0;i<n-2;i++) for(int j=i+1;j<n-1;j++) for(int k=j+1;j<n;j++) { //使用三重循环取到数组中的任意三个值相加,如果为0则输出 if(arr[i]+arr[j]+arr[k]==0) System.out.println(arr[i]+" "+arr[j]+" "+arr[k]); } }
解法2(时间复杂度O(n^2)空间复杂度O(1))
算法思想:
现将数组排序,i 指向数组的开始,j 指向i 的后一位,k 指向数组最后,如果
arr[i]+arr[j]+arr[k]==0,j++,k–;
否则如果
arr[i]+arr[j]+arr[k]>0
k–;
否则
arr[i]+arr[j]+arr[k]<0
i++;
public static void findTriplets(int arr[], int n){ Arrays.sort(arr);//把数组先从小到大排序 for(int i=0;i<n-2;i++) { int j=i+1; int k=n-1; while(k>j) { if(arr[i]+arr[j]+arr[k]==0) {//如果相加为0就输出 System.out.println(arr[i]+" "+arr[j]+" "+arr[k]); j++; k--; } else if(arr[i]+arr[j]+arr[k]>0){ k--; //如果相加大于0时k-- } else { j++; //相加小于0时j++ } } } }
0 0
- 查找数组中3个相加和为零的元素
- 求数组内任意三个数相加和为零的组合
- 查找数组中前K个大的和小的元素
- 在排序数组中查找和为定值的两个元素
- 微软试题:查找数组中最小的k个元素
- 找到一个数组中相加为特定数值的两个元素
- 程序员面试题精选(43):数组中连续元素相加和最小的元素序列
- 查找数组中第二个最小元素
- 在一个数组中查找最大的K个元素或者最小的K个元素
- [2014美团笔试]在二维数组中查找一个数,数组元素的行和列均为升序
- 查找最小的k个元素(数组)
- 第1题 在排序数组中查找和为某个指定数的两个元素之和
- 查找数组中最大的2个元素及大数据查找
- 3Sum:带重复数组中取三个元素求和为零
- 数组中相加之和等于特定值的元素
- 数组中元素查找和find()函数
- 去除数组中为零的项
- .输出数组中下标为3的数。和值为3的倍数的元素
- AIM Tech Round 3 (Div. 1) A. Letters Cyclic Shift 贪心
- Android数据存储
- Java高级篇(1)与Console交互之InputStreamReader 、字符串转Float
- 【数据结构与算法】排序算法——快速排序
- mysql 提示表不存在的解决方法error: 1146: Table doesn't exist
- 查找数组中3个相加和为零的元素
- HBase - 建表语句解析
- ActiveMQ入门
- 简单工厂模式&&单例模式
- Web网络聊天室
- PAT L1-011. A-B
- Qt5 5种connect
- UDP分包组包的类
- 6影像合成之边缘效果