面试题: 第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度 第3行为一个正整数q代表查询的组数 第4行到第(3+q)行,每行包含3个整数l,r,k代表一组查

输入描述:
输入: 第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度 第3行为一个正整数q代表查询的组数 第4行到第(3+q)行,每行包含3个整数l,r,k代表一组查询,即标号为l<=i<=r的用户中对这类文章喜好值为k的用户的个数。 数据范围n <= 300000,q<=300000 k是整型

输出描述:
输出:一共q行,每行一个整数代表喜好值为k的用户的个数

输入例子1:
5
1 2 3 3 5
3
1 2 1
2 4 5
3 5 3

输出例子1:
1
0
2

例子说明1:
样例解释:
有5个用户,喜好值为分别为1、2、3、3、5,
第一组询问对于标号[1,2]的用户喜好值为1的用户的个数是1
第二组询问对于标号[2,4]的用户喜好值为5的用户的个数是0
第三组询问对于标号[3,5]的用户喜好值为3的用户的个数是2

import java.util.Scanner;

/**
 * 类名:main<br>
 * 功能:TODO<br>
 * 作者:王孟鑫<br>
 * 日期:2019/1/21 0021<br>
 * 版本:1.0.0<br>
 */
public class main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //定义用户数量
        System.out.println("请输入用户数:");
        int n = scanner.nextInt();
        System.out.println("请输入用户的喜好度:");
        //定义数组s将用户喜好度放入数组中
        int[] s = new int[n];
        for (int i = 0; i < s.length; i++) {
            s[i] = scanner.nextInt();
        }
        System.out.println("请输入查询的组数:");
        int q = scanner.nextInt();
        //定义二维数组m将查询内容输入进去
        int[][] m = new int[q][3];
        //定义数组h用于将最后的查询结果g存进数组,方便输出
        int[] h=new int[q];
        for (int j = 0; j < q; j++) {
            System.out.println("请输入第" + (j + 1) + "组数据:");
            //输入每一组的查询数据
            for (int x = 0; x < 3; x++) {
                m[j][x] = scanner.nextInt();
            }
            int g = 0;
            //进行判断l<=i<=k中读者喜好度人数,这里的n是5
            for (int z = 0;z<n;z++) {
                //l=(m[j][0]-1),k=(m[j][1]-1,z=i,(m[j][2])表示需要查询的喜好度
                if ((m[j][0]-1) <= z && z <= (m[j][1]-1)) {
                    if (s[z] == (m[j][2])) {
                        g++;
                    }
                }
            }
            h[j]=g;
        }
        System.out.println("人数:");
        for(int k=0;k<q;k++){
            //输出结果
            System.out.println(h[k]);
        }
    }
}

结果展示:
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值