2020年阿里巴巴实习岗笔试题

题目描述

在这里插入图片描述
测试用例:

cbadg
cbgda

输出:
2

public boolean check(String S,String T){
      int len = S.length();
      int[] alphet = new int[26];
      for(int i =0;i<len;i++){
        alphet[S.charAt(i) - 'a'] ++;
      }
      for(int i =0;i<len;i++){
        alphet[T.charAt(i) - 'a'] --;
        if( alphet[T.charAt(i) - 'a'] < 0){
          return false;
        }
      }
      return true;
    }

    public int ToMove(String S,String T){
        if(!check(S,T)){
          return -1;
        }
        int j =0;
        for(int i=0;i<S.length();i++){
          if(S.charAt(i) == T.charAt(j)){
            j++;
          }
        }
        return S.length() - j;
    }

题目描述

求n个随机数中最小值的期望值。

三行输入,分别为:

n: 随机数的个数

l1, l2, … ln : li 为第i个随机数的最小值

r1, r2, … rn :ri 为第i个随机数的最大值

即第i个随机数的取值区间是 [li, ri],取到区间里数字的概率相等

示例输入:
2
1 2
3 3

输出:
1.83333

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int[] l = new int[n];
    int[] r = new int[n];
    int min1 = Integer.MAX_VALUE;
    int min2 = Integer.MAX_VALUE;
    for (int i = 0; i < n; i++) {
      l[i] = in.nextInt();
      min1 = min1 > l[i] ? l[i]:min1;
    }

    for (int i = 0; i < n; i++) {
      r[i] = in.nextInt();
      min2 = min2 > r[i] ? r[i]:min2;
    }

    //一致性:min2-min1>0
    double[] p = new double[min2-min1+2];
    for(int i = min1;i <= min2; i++){
      p[i - min1] = 1;
      for(int j = 0;j<n;j++){
        if(l[j]<= i && i <= r[j]){
          p[i-min1] *= (r[j]-i + 1.0)/(r[j]-l[j] + 1.0);
        }
      }
    }
    double ans = 0;
    for(int i = 0;i <= min2-min1;i++){
      ans += (i + min1) * (p[i]-p[i+1]);
    }
    System.out.printf("%.6f",ans);
  }
发布了121 篇原创文章 · 获赞 1333 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/JAck_chen0309/article/details/105136315