本文主要是介绍【题解 | 思维】三元组中心问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
三元组中心问题
注意点:
- 同一个位置的元素,不管以它为中心能组成多少个三元组,只记一个
- 不同索引位置的相同元素,算多个中心元素。
常规暴力
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int numbers[] = new int[n + 1];for (int i = 1; i < n + 1; i++) {numbers[i] = in.nextInt();}int ans = 0;int help[] = new int[n + 1];for (int i = 1; i < n + 1; i++) {for (int j = i + 1; j < n + 1; j++) {for (int k = j + 1; k < n + 1; k++) {if (numbers[i] < numbers[j] && numbers[j] < numbers[k]) {help[j] = 1;}}}}for (int j = 1; j < n + 1; j++) {if (help[j] != 0) {ans++;}}System.out.println(ans);in.close();}
}
Stream流
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] numbers = new int[n];for (int i = 0; i < n; i++) {numbers[i] = in.nextInt();}int ans = 0;for (int i = 1; i < n; i++) {if (numbers[i] > Arrays.stream(numbers, 0, i).min().getAsInt()&& numbers[i] < Arrays.stream(numbers, i, n).max().getAsInt()) {ans++;}}System.out.println(ans);in.close();}
}
对数组numbers
进行遍历,从第二个元素开始,到倒数第二个元素结束(因为作为递增三元组的中心,至少需要有一个元素在它的左边和右边)。
对于每个元素,检查它是否大于它左边的所有元素中的最小值,并且小于它右边的所有元素中的最大值。如果满足这两个条件,那么这个元素就可能作为递增三元组的中心,计数器ans增加1。
这篇关于【题解 | 思维】三元组中心问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!