无重复字符的最长子串
给定一个字符串 s,找出其中不含有重复字符的最长子串的长度。
示例:
输入:s = "abcabcbb"
输出:3
解释:因为无重复字符的最长子串是"abc",所以其长度为 3。
思路:维护一个滑动窗口;用
Set维护这个窗口无重复字符。需要记住其三个方法:has/delete/add
tsfunction lengthOfLongestSubstring(s: string): number { let left = 0, maxLen = 0; const set = new Set<string>(); for (let right = 0; right < s.length; right++) { while (set.has(s[right])) { set.delete(s[left++]); } set.add(s[right]); maxLen = Math.max(maxLen, right - left + 1); } return maxLen; }
合并两个有序数组
给定两个非递减序列 nums1 和 nums2,另有两个整数 m 和 n 分别表示数组的长度。
请合并 nums2 到 nums1 中,使合并后的数组同样按照非递减顺序排列。
思路:因为本身就是在往
nums1里放元素,所以只要判断nums2走完没有即可
tsfunction merge(nums1: number[], m: number, nums2: number[], n: number): void { let p = n + m - 1; let i = m - 1, j = n - 1; while (i >= 0 && j >= 0) { if (nums1[i] > nums2[j]) { nums1[p--] = nums1[i--]; } else { nums1[p--] = nums2[j--]; } } while (j >= 0) { nums1[p--] = nums2[j--]; } }
比较版本号
给定两个版本号 version1 和 version2,请比较它们。修订号的值是它转换为整数并忽略前导零。
比较版本号时,请按从左到右的顺序依次比较它们的版本号。如果其中一个版本字符串的修订号较少,则将缺失的修订号的值视为 0
返回规则如下:
-
如果
version1<version2,返回 -1 -
如果
version1>version2,返回 1 -
除此之外返回 0
tsfunction compareVersion(version1: string, version2: string): number { const v1 = version1.split("."); const v2 = version2.split("."); const len = Math.max(v1.length, v2.length); for (let i = 0; i < len; i++) { const c1 = Number(v1[i] || "0"); const c2 = Number(v2[i] || "0"); if (c1 > c2) { return 1; } if (c1 < c2) { return -1; } } return 0; }
Article Index