360 第一次笔试第二题 看花 Java ..

360第二题 打了个表a[i][j] 记录i到j时间段内的观看的种类数 ,没想到直接就AC了..

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Scanner;
public class Main {
static final int MAX = 2005;
static int a[] = new int[MAX];
static int n, m, q;
static int[][] kinds = new int[MAX][MAX];

public static void getKindTable() {
    HashSet set = new HashSet();
    for (int i = 1; i <= n; i++) {
        set.clear();
        for (int j = i; j <= n; j++) {
            set.add(a[j]);
            kinds[i][j] = set.size();
        }
    }
}

public static int getAns(int l, int r) {
    if (l > r) {
        int t = l;
        l = r;
        r = t;
    }
    return kinds[l][r];
}

public static void main(String[] args) {
    Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
    n = sc.nextInt();
    m = sc.nextInt();
    for (int i = 1; i <= n; i++) {
        a[i] = sc.nextInt();
    }
    getKindTable();
    q = sc.nextInt();
    for (int i = 0; i < q; i++) {
        int l, r;
        l = sc.nextInt();
        r = sc.nextInt();
        System.out.println(getAns(l, r));
    }
}

}
#Java##题解#
全部评论
#include"iostream" using namespace std; int main() {     int n, m, count;     int a[2000];//看花的种类     int d[2000][2];     cin >> n >> m;//输入看花的次数,花的个数     for (int i = 0; i < n; i++)     {         cin >> a[i];//看到的花     }     cin >> count;//问题个数     for (int i = 0; i < count; i++)     {         for (int j = 0; j < 2; j++)         {             cin >> d[i][j];//区间             cout << " " << d[i][j];         }         cout << endl;     }     int iT = 0;     while (d[iT][0] != 0)     {         int p[M] = { 0 };//状态函数         for (int i = d[iT][0] - 1; i < d[iT][1]; i++)         {             p[a[i]] = 1;         }         for (int i = 1; i < m + 1; i++)             p[0] += p[i];         cout << p[0] << endl;         iT++;     } }
点赞 回复 分享
发布于 2018-09-04 20:58

相关推荐

评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客企业服务