• 17.18. 最短超串


    leetcode

    假设你有两个数组,一个长一个短,短的元素均不相同。找到长数组中包含短数组所有的元素的最短子数组,其出现顺序无关紧要。

    返回最短子数组的左端点和右端点,如有多个满足条件的子数组,返回左端点最小的一个。若不存在,返回空数组。

    示例 1:

    输入:
    big = [7,5,9,0,2,1,3,5,7,9,1,1,5,8,8,9,7]
    small = [1,5,9]
    输出: [7,10]
    示例 2:

    输入:
    big = [1,2,3]
    small = [4]
    输出: []
    提示:

    big.length <= 100000
    1 <= small.length <= 100000

    class Solution {
        public int[] shortestSeq(int[] big,int[] small) {
            if(small.length>big.length){ //small长度大于big的情况
                return new int[0];
            }
            Map<Integer,Integer> map = new HashMap<>();
            int count = small.length;
            int[] ans = {0,big.length};
    
            for(int i:small){
                map.put(i, -1);
            }
    
            for(int i=0;i<big.length;i++){
                if(map.containsKey(big[i])){
                    if(map.get(big[i])==-1){
                        count--;
                    }
                    map.put(big[i], i);
                }
                if(count<=0){
                    Object[] objects =  map.values().toArray();
                    int minNum = getMin(objects);
                    if(i-minNum+1<ans[1]-ans[0]+1){
                        ans[0]=minNum;
                        ans[1]=i;
                    }
                }
                if(count>0&&big.length-1==i){ // 查找不到超短字串的情况
                    ans=new int[0];
                }
            }
    
            return ans;
        }
    
        int getMin(Object[] obj) {
            int minNum = Integer.MAX_VALUE;
            for(Object i:obj){
                minNum=Math.min((int)i, minNum);
            }
            return minNum;
        }
    }
    

    题目链接

  • 相关阅读:
    JAVA中数据类型转换
    PADS故障解决
    KEIL4.12中添加ULINK2的支持
    身份证号码规则
    用19种编程语言写Hello World
    30年的Hello world
    Java Annotation手册
    线控耳机原理图
    破解EXCEL2007的密码
    [野狐行][内存辅助][二重门更新中][2016/6/1]
  • 原文地址:https://www.cnblogs.com/ZCWang/p/12844796.html
Copyright © 2020-2023  润新知