3. 无重复字符的最长子串 3. 无重复字符的最长子串
思路:
滑动窗口方法,构造出散列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var lengthOfLongestSubstring = function (s ) { const occ = new Set (); const n = s.length; let rk = -1 ,ans = 0 ; for (let i=0 ;i<n;++i){ if (i!=0 ){ occ.delete(s.charAt(i-1 )); } while (rk + 1 < n && !occ.has(s.charAt(rk + 1 ))) { occ.add(s.charAt(rk+1 )); ++rk; } ans = Math .max(ans, rk - i + 1 ); } return ans; };
4. 寻找两个正序数组的中位数 4. 寻找两个正序数组的中位数
思路:
调用concat()
函数将两个数组合并
将数组排序(不用数组自带的arr.sort()
方法是因为该方法无法正确判断当数组有负数的情况,所以需要另外写一个排序函数)
根据数组长度的奇偶求中位数(注意,当长度n为偶数时,中位数为数组的第n/2位和第n/2-1位,因为数组开头是0)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 function sort (nums ) { for (let i=0 ;i<nums.length-1 ;i++){ for (let j=0 ;j<nums.length-1 -i;j++){ if (nums[j]>nums[j+1 ]){ let temp = nums[j+1 ]; nums[j+1 ] = nums[j]; nums[j] = temp; } } } return nums; } var findMedianSortedArrays = function (nums1, nums2 ) { var num3 = nums1.concat(nums2); num3 = sort(num3); var ansNum = num3.length; if (ansNum%2 != 0 ){ return num3[Math .floor(ansNum/2 )]; }else { var ans = num3[ansNum/2 ]+num3[ansNum/2 -1 ]; return ans/2 ; } return null ; };
56.合并区间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Solution : def merge (self, intervals: List [List [int ]] ) -> List [List [int ]]: intervals.sort(key=lambda x: x[0 ]) merged = [] for interval in intervals: if not merged or merged[-1 ][1 ] < interval[0 ]: merged.append(interval) else : merged[-1 ][1 ] = max (merged[-1 ][1 ], interval[1 ]) return merged
94. 二叉树的中序遍历 94. 二叉树的中序遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var inorderTraversal = function (root ) { const res = []; const inorder = (root ) => { if (!root) { return ; } inorder(root.left); res.push(root.val); inorder(root.right); } inorder(root); return res; };
102. 二叉树的层序遍历 102.二叉树的层序遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 var levelOrder = function (root ) { const ret = []; if (!root){ return ret; } const q = []; q.push(root); while (q.length !== 0 ){ const currentLevelSize =q.length; ret.push([]); for (let i = 1 ;i<=currentLevelSize;i++){ const node = q.shift(); ret[ret.length-1 ].push(node.val); if (node.left) q.push(node.left); if (node.right) q.push(node.right); } } return ret; }
寻找6174
给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到 一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。
例如,我们从6767开始,将得到
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 … …
现给定任意4位正整数,请编写程序演示到达黑洞的过程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function findNum (num ) { var str = '' ; var node = '->' ; var chazhi = num; str = str+chazhi.toString(); while (chazhi!=6174 ){ var temp = (chazhi+'' ).split("" ); var small = parseInt (temp.sort().join("" )); var big = parseInt (temp.reverse().join("" )); chazhi = big-small; str = str+node+chazhi.toString(); } return str; } console .log(findNum(2021 ));