0
点赞
收藏
分享

微信扫一扫

字节跳动-用户喜好

乐百川 2022-04-24 阅读 64

参考:https://blog.csdn.net/qq_37651325/article/details/107697293
1.暴力解法

import java.util.Scanner;
public class Main {
    public static void main(String[] a){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();//用户数量
        int[] arr=new int[n];//每个用户的喜好值
        for(int i=0;i<n;i++){
            arr[i]=sc.nextInt();
        }
        int row=sc.nextInt();//查询的数量
        for(int i=0;i<row;i++){
            int l=sc.nextInt()-1;
            int r=sc.nextInt()-1;
            int k=sc.nextInt();
            int res=0;
            for(int j=l;j<=r;j++){
                if(arr[j]==k){
                    res++;
                }
            }
            System.out.println(res);
        }

    }
}

2.哈希表优化

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static int calculate(int l,int r,int k,
                                HashMap<Integer,List<Integer>>map){
        int res=0;
        List<Integer> temp=map.get(k);
        if(temp!=null){
            for(Integer cur:temp){
                if(cur>=l && cur<=r){
                    res++;
                }
            }
        }
        return res;
    }

    public static void main(String[] a){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();//用户数量
        int[] arr=new int[n];//每个用户的喜好值
        for(int i=0;i<n;i++){
            arr[i]=sc.nextInt();
        }
        int row=sc.nextInt();//查询的数量
//        map,key:喜好值,value:喜好值对应的用户索引
        HashMap<Integer, List<Integer>>map=new HashMap<>();
        for(int i=0;i<n;i++){
            if(!map.containsKey(arr[i])){
                List<Integer> list=new ArrayList<>();
                list.add(i);
                map.put(arr[i],list);
            }else{
                List<Integer> list=map.get(arr[i]);
                list.add(i);
            }
        }
        for(int i=0;i<row;i++){
            int l=sc.nextInt()-1;
            int r=sc.nextInt()-1;
            int k=sc.nextInt();
            int res=calculate(l,r,k,map);
            System.out.println(res);
        }
    }
}

举报

相关推荐

0 条评论