每日一题:给你一个长度为n的序列A,你需要算出有多少个三元组(Ai,Aj,Ak)满足i<j<k且Ai≤Aj≤Ak。

每日一题:给你一个长度为n的序列A,你需要算出有多少个三元组(Ai,Aj,Ak)满足i

2020年11月10日,微众银行校招笔试,算法第三题


一、题目描述

题目:
给你一个长度为n的序列A,你需要算出有多少个三元组(Ai,Aj,Ak)满足i

输入描述:
    第一行为一个整数n,表示序列A的长度。
	接下来一行为n个整数,第i个数表示Ai的值。
输出描述:
   	输出一个整数x,表示满足要求的三元组数量。

样例输入:
  	6
	2 3 5 4 3 3
样例输出:
    6

二、解题思路

  1. 定义一个长度为n的数组
  2. 存入n个数到数组中
  3. 由于比较连续3个数,所以,进行三重for循环,满足第一个下标小于第二个下标,第二个下标小于第三个下标,且第一个值小于第二个,第二个值小于第三个,那么则为满足条件的数值。

三、实现代码

代码如下:

package weizhong;
import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //输入数组长度n
        int n = sc.nextInt();
        //定义数组,长度为n
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = sc.nextInt();
        }

        //判断是否为三元组
        int count = 0;
        for (int i = 0; i < n-2; i++) {
            for (int j = i+1; j < n-1; j++) {
                for (int k = j+1; k < n; k++) {
                    if (nums[i]<=nums[j] && nums[j]<=nums[k]){
                        count++;
                    }
                }
            }
        }
        System.out.println(count);
    }
}

你可能感兴趣的:(算法,算法,数据结构)