多选三,拿到最接近的小于等于目标金额的三件商品
思路:单层for+双指针
输入n件商品价格: 23,24,26,27
输入手里的钱:78
输出:能够消费的最大金额
来源:2021年01月-华为德科OD机试真题
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
//三次for
public class Main01 {
//单层for+双指针
public static Integer solve(int[] a, int target){
//排序
Arrays.sort(a);
int max = -1;
for (int i = 0; i < a.length - 2; i++) {
if(a[i] > target){
break;
}
int left = i + 1;
int right = a.length - 1;
while(left < right){
if(a[left] + a[right] + a[i] == target){
return target;
}else if(a[left] + a[right] + a[i] < target){
max = Math.max(max, a[left] + a[right] + a[i]);
left++;
}else{
right--;
}
}
}
return max;
}
}