js实现 给定两个大小分别为 m 和 n 的正序从小到大数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。给定一个字符串 s 请你找出其中不含有重复字符的 最长子串 的长度。
给定两个正序数组 nums1 和 nums2,可以使用归并排序的思想来找到这两个数组的中位数。
具体步骤如下:
- 初始化两个指针,p1 指向 nums1 的起始位置,p2 指向 nums2 的起始位置,count 记录当前遍历的元素个数。
- 创建一个新的数组 merged,用于存储合并后的数组。
- 使用循环遍历 nums1 和 nums2,比较当前指针指向的元素,将较小的元素加入 merged 数组,并将对应指针向后移动一位。
- 当其中一个数组遍历完后,将另一个数组剩下的元素依次加入 merged 数组。
- 如果数组的长度是奇数,中位数就是 merged 数组的中间元素;如果是偶数,中位数就是 merged 数组中中间两个元素的平均值。
代码示例:
function findMedianSortedArrays(nums1, nums2) {
const merged = [];
let p1 = 0, p2 = 0;
const totalLen = nums1.length + nums2.length;
const isEven = totalLen % 2 === 0;
const targetLen = Math.floor(totalLen / 2) + 1;
for (let count = 0; count < targetLen; count++) {
if (p1 >= nums1.length) {
merged.push(nums2[p2++]);
} else if (p2 >= nums2.length) {
merged.push(nums1[p1++]);
} else if (nums1[p1] < nums2[p2]) {
merged.push(nums1[p1++]);
} else {
merged.push(nums2[p2++]);
}
}
if (isEven) {
return (merged[targetLen - 1] + merged[targetLen - 2]) / 2;
} else {
return merged[targetLen - 1];
}
}
给定一个字符串 s,要找到其中不含有重复字符的最长子串的长度,可以使用滑动窗口的思想。
具体步骤如下:
- 初始化一个集合 set,用于存储当前窗口中的字符。
- 初始化两个指针,left 和 right,分别指向窗口的左右边界。
- 循环遍历字符串 s,不断移动右指针,并将对应的字符加入集合中。
- 如果集合中已经存在右指针指向的字符,表示当前窗口中出现了重复字符,需要移动左指针,并从集合中移除对应字符,直到窗口中不再有重复字符。
- 在每次移动右指针时,记录窗口的大小,并更新最大窗口大小。
- 最终得到的最大窗口大小就是不含有重复字符的最长子串的长度。
代码示例:
function lengthOfLongestSubstring(s) {
const set = new Set();
let left = 0, right = 0;
let maxLength = 0;
while (right < s.length) {
if (!set.has(s[right])) {
set.add(s[right++]);
maxLength = Math.max(maxLength, set.size);
} else {
set.delete(s[left++]);
}
}
return maxLength;
}
以上就是给定两个正序数组找中位数和给定字符串找不含有重复字符的最长子串的长度的实现方法
原文地址: https://www.cveoy.top/t/topic/iHIo 著作权归作者所有。请勿转载和采集!