1. 问题描述
给定一个数组[7,3,4,8,1], max=9
这个数组中满足条件的组合为8,1
则输出 8,1
2.问题解析
方法1:“蛮力”法
两重循环判断两个数的和是否为max,时间复杂度为O(n²)
方法2:排序法
先对数组元素进行排序,此算法的时间复杂度为O(nlogn),对排序后的数组分别从前到后和从后向前遍历,当满足a[start]+a[end]>max ,如果存在两个数的和等于max则一定在[start,end+1]之间,当满足a[start]+a[end]<max ,如果存在两个数的和等于max则一定在[start+1,end]之间.
3.代码
1 | import java.util.Arrays; |