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

50次阅读

共计 1192 个字符,预计需要花费 3 分钟才能阅读完成。

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

正文完
 0