8.13 美团笔试 第四题
/** * 给一个数组,nums, 要求找到所有满足下列条件的三元组的“个数” * 1) i < j < k * 2) nums[i] - nums[j] = 2nums[j] - nums[k] * 思路: * 条件2转化为nums[i] + nums[k] = 3nums[j] * 遍历i=0..n - 2, k = i + 2..n * 期间维护一个map,记录nums区间(i,j) 每一个值的个数,然后将值为 (nums[i] + nums[k]) / 3(要能够整除)的个数记录 * 最后的数目就是结果 */ public class Main_4 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); final int n = sc.nextInt(); int[] values = new int[n]; for (int i = 0;i < n;++i) { values[i] = sc.nextInt(); } long result = 0; for (int i = 0;i < n - 2;++i) { // map记录 值--个数 Map<Integer,Integer> map = new HashMap<>(); map.put(values[i + 1], 1); for (int k = i + 2;k < n;++k) { int target = (values[i] + values[k]); if (target % 3 == 0) { result += map.getOrDefault(target / 3, 0); } // 到这里,values[k]可以被添加到map中了 map.put(values[k], map.getOrDefault(values[k], 0) + 1); } } System.out.println(result); } }
#美团笔试#