首页 > 携程5.27笔试第二题(抽奖序列)
头像
chenjiag
编辑于 2021-05-28 10:18
+ 关注

携程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));
    }
}

全部评论

(1) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐