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; })(); } };

浙公网安备 33010602011771号