携程5.27笔试第二题(抽奖序列)

import java.util.HashMap;
import java.util.Map;

public class Main2 {
    static int winner(int[] s, int[] t) {
        int len = s.length;
        Map<Integer, Integer> window = new HashMap<>();
        Map<Integer, Integer> needs = new HashMap<>();
        for (int a : t) {
            needs.put(a, needs.getOrDefault(a, 0) + 1);
        }
        int left =0;
        int right = 0;
        // 最短序列的长度
        int res = Integer.MAX_VALUE;
        int valid = 0;
        // 起始位置
        int start = 0;
        while (right < len) {
            int a = s[right];
            right++;
            if (needs.containsKey(a)) {
                window.put(a, window.getOrDefault(a, 0) + 1);
                if (needs.get(a).equals(window.get(a))) {
                    valid++;
                }
            }
            while (needs.size() == valid) {
                if (right - left < res) {
                    start = left;
                    res = right - left;
                }
                int b = s[left];
                left++;
                if (needs.containsKey(b)) {
                    if (needs.get(b).equals(window.get(b))) {
                        valid--;
                    }
                    window.put(b, window.get(b) - 1);
                }
            }
        }
        return start == 0 ? 0 : start + 1;
    }

    public static void main(String[] args) {
        int[] s = {1,2,5,4,3,4,7,1,4,9,3,1};
        int[] t = {3,1, 4};
        System.out.println(winner(s, t));
    }
}

#笔试题目##携程#
全部评论
xd你不会抄我的吧,一毛一样,变量名都不带改的
点赞 回复 分享
发布于 2021-05-27 22:01

相关推荐

不愿透露姓名的神秘牛友
09-30 19:49
起名星人:蛮离谱的,直接要求转投销售
投递汇川技术等公司10个岗位
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
1 4 评论
分享
牛客网
牛客企业服务