Leetcode 697 Javascript FT 55.66%

285 阅读1分钟

思路

一个 Relationship 的 map。数组值作为 key,用一个 obj 作为值:

{
    size
    start
    end
}

Array.from 转换 map,再跟进 size 排序。找出 end - start 最小的。
具体代码如下:

/**
 * @param {number[]} nums
 * @return {number}
 */
var findShortestSubArray = function(nums) {
    let relations = new Map();
    let len = nums.length;
    for(let i = 0; i < len; ++i) {
        let key = nums[i];
        if(relations.has(key)){
            let tmp = relations.get(key);
            relations.set(key, {
                start: tmp.start,
                end: i,
                size: tmp.size + 1
            });
        } else {
            relations.set(key, {
                start: i,
                end: i,
                size: 1
            })
        }
    }
    let list = Array.from(relations).sort((a, b) => {
      return b[1].size - a[1].size;
    })
    let maxShow = list[0][1].size;
    let pointer = 1;
    let min = list[0][1].end - list[0][1].start;
    let listLen = list.length;
    while(pointer < listLen && list[pointer][1].size >= maxShow) {
        let delta = list[pointer][1].end - list[pointer][1].start;
        if (delta < min) {
            min = delta;
        }
        pointer ++;
        if (pointer >= listLen)
            break;
    }
    return min + 1
};