该浏览器不支持canvas

Leetcode部分题目整理(Javascript)

3.无重复字符的最长子串

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    var ans = [], vis = [], max = 0;
    for(var i = 0; i < 256; i++){
        vis.push(-1);
    }
    for(var i = 0; i < s.length; i++){
        var t = s[i].charCodeAt() - 0;
        if(vis[t] == -1){
            vis[t] = i;
            ans.push(s[i]);
            if(ans.length > max){
                max = ans.length;
            }
        }
        else{
            var pos = ans.indexOf(s[i]);
            for(var j = pos - 1; j >= 0; j--){
                vis[ans[j].charCodeAt() - 0] = -1;
            }
            ans = ans.slice(pos + 1);
            ans.push(s[i]);
            vis[t] = i;
        }
    }
    return max;
};

 

4. 寻找两个有序数组的中位数

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var findMedianSortedArrays = function(nums1, nums2) {
    if(nums1.length > nums2.length){
        var t = nums1;
        nums1 = nums2;
        nums2 = t;
    }
    var len = nums1.length + nums2.length;
    function find(k,nums1,nums2){
        var ans = null;
        while(ans === null){
            if(k % 2 == 1){
                x = Math.floor(k / 2);
                if(x == 0)
                    x = 1;
            }else{
                x = k / 2;
            }
            var flag = false;
            var temp = [];
            if(nums1.length == 0 && nums2.length != 0){
                temp = nums2.slice(0,k);
                k = 0;
            }else if(nums2.length == 0){
                temp = nums1.slice(0,k);
                k = 0;
            }else if(nums1.length < x){
                if(nums1[nums1.length - 1] < nums2[x - 1]){
                    k -= nums1.length;
                    temp = nums1.slice();
                    nums1 = [];
                }else{
                    k -= x;
                    temp = nums2.slice(0,x);
                    nums2 = nums2.slice(x);
                }
            }else{
                k -= x;
                if(nums1[x - 1] < nums2[x - 1]){
                    temp = nums1.slice(0,x);
                    nums1 = nums1.slice(x);
                }else{
                    temp = nums2.slice(0,x);
                    nums2 = nums2.slice(x);
                }
            }
            if(!k){
                ans = temp[temp.length - 1];
            }
        }
        return ans;
    }
    if(len % 2){
        return find((len + 1) / 2,nums1,nums2);
    }else{
        return (function(){
                    var x1 = nums1.slice(),x2 = nums2.slice();
                    var sum = find(len / 2,nums1,nums2);
                    nums1 = x1;
                    nums2 = x2;
                    sum += find((len / 2 + 1),nums1,nums2);
                    return sum / 2;
        })();
    }
};

 

posted @ 2019-08-20 09:17  真是啰嗦  阅读(355)  评论(0)    收藏  举报