广联达笔试

第一题是粒子的题,其实我的思路很简单,用hash表记录下来顺序不对的,碰到就跳过就完事,然后双指针遍历找到两个数组就好了
举个栗子:
5 4 3 2 1(指针1)
1 5 3 4 2(指针2)
首先1是不对的所以把1记录下来,指针2右移,碰到5,是对的,两个指针共同向右移动,接着碰到3,3是不对的,记录下来,指针2右移,碰到4,4是对的,指针1和2同时右移,指针1碰到不对的3直接跳过,碰到2是对的,两个指针一起后移,接着指针1碰到1,1是不对的跳过,至此遍历结束,可以的到逆序的就是指针1和指针2不相等的情况(注意指针1会先跳过记录顺序不对的数)

第二题,我就是正常贪心+hash,过了93,下面是代码
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt(); int m=sc.nextInt();
        Map<Integer,Integer> group=new HashMap<>();
        Map<Integer,List<Integer>> idxtogroup=new HashMap<>();
        for(int i=0;i<m;i++){
            int s=sc.nextInt(); int e=sc.nextInt();
            group.put(i,sc.nextInt());
            for(int j=s;j<=e;j++){
                List<Integer> temp=idxtogroup.getOrDefault(j, new ArrayList<>());
                temp.add(i);
                idxtogroup.put(j, temp);
            }
        }
        long res=0;
        for(int i=1;i<=n;i++){
            if(!idxtogroup.containsKey(i)){
                res++;
            }
            else{
                boolean flag=false;
                List<Integer> list=idxtogroup.get(i);
                for(int v:list){
                    if(group.get(v)<=0){
                        flag=true;
                        break;
                    }
                }
                if(flag)    continue;
                for(int v:list){
                    int ts=group.get(v);
                    group.put(v, ts-1);
                }
                res++;
            }
        }
        System.out.println(res);
    }
}



全部评论
第一个用求了最大公共子序列,然后用n-减去这个长度,只过了23,有大佬知道有什么漏洞吗
点赞
送花
回复 分享
发布于 2022-09-01 00:17 北京
大佬第二题我看不懂,可以告知一下思路吗
点赞
送花
回复 分享
发布于 2022-09-01 08:19 上海
秋招专场
校招火热招聘中
官网直投
第二题什么思路呀
点赞
送花
回复 分享
发布于 2022-09-01 08:55 河南
你好,可以问问笔试题型嘛~有几个选择哇
点赞
送花
回复 分享
发布于 2022-09-14 00:27 湖南

相关推荐

点赞 评论 收藏
分享
8 30 评论
分享
牛客网
牛客企业服务