关于算法:leetCode第三题和第四题无重复字符的最长子串和寻找两个正序数组的中位数

1.leetCode第三题
需要:
https://leetcode-cn.com/probl…

给定一个字符串 s ,请你找出其中不含有反复字符的最长子串的长度。
输出: s = “pwwkew”
输入: 3
解释: 因为无反复字符的最长子串是 “wke”,所以其长度为 3。
  请留神,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。

 function print(s) {
    let str = "";
    let size = 0;
    for (let i = 0; i < s.length; i++) {
      if (str.includes(s[i])) {
     //拼接字符串的过程中将原来的str置空 而后再从新累加
        str = str.substr(i + 1);
      } else {
        str += s[i];
        //计算size的最大值
        size = size < str.length ? str.length : size;
      }
    }
    return size;
  }

2.leetCode第四题
需要:
https://leetcode-cn.com/probl…

给定两个大小别离为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

示例 1:
输出:nums1 = [1,3], nums2 = [2]
输入:2
解释:合并数组 = [1,2,3] ,中位数 2
输出:nums1 = [1,2], nums2 = [3,4]
输入:2.5
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
示例 3:
输出:nums1 = [0,0], nums2 = [0,0]
输入:0
示例 4:
输出:nums1 = [], nums2 = [1]
输入:1
示例 5:
输出:nums1 = [2], nums2 = []
输入:2
  function print(nums1, nums2) {
    let m = nums1.length - 1;
    let n = nums2.length - 1;
    let k = end = m + n + 1;
    while (m >= 0 && n >= 0) {
      if (nums1[m] <= nums2[n]) {
        nums1[k] = nums2[n];
        n--;
        k--;
      } else {
        nums1[k] = nums1[m];
        m--;
        k--;
      }
    }
    while (n >= 0) {
      nums1[k] = nums2[n];
      k--;
      n--;
    }
    //以上是合并两个有序数组 nums1为合并之后的
    //用来判断是否是一个整数
    let middleStr = (end / 2).toString();
    let middleIndex = Math.floor(end/ 2);
    //如果是小数例如[1,2,3,4]   end=3/2=1.5
    if (middleStr.includes(".")) {
                // (2             +          3)            /2=2.5
      return (nums1[middleIndex] + nums1[middleIndex + 1]) / 2;
    } else {
    //[1,2,3] middleStr为2/2=1  打印为2
      return nums1[middleStr] / 1;
    }
  }

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理