30 天刷题计划(六)

题目来源: LeetCode 75 30 天 JavaScript 挑战

2634. 过滤数组中的元素

思路

实现 Array.filter

代码

ts 复制代码
type Fn = (n: number, i: number) => any

function filter(arr: number[], fn: Fn): number[] {
	 
   let res = []

   for(let i = 0; i < arr.length; i++) {

     if (fn(arr[i], i)) {
       res.push(arr[i])
     }

   }

  return res
};

2626. 数组归约运算

思路

实现 Array.reduce

代码

ts 复制代码
type Fn = (accum: number, curr: number) => number

function reduce(nums: number[], fn: Fn, init: number): number {
  if (!nums.length) {
    return init
  }

  let _init = init

  for(let i = 0; i < nums.length; i++) {
    _init = fn(_init, nums[i])
  }

  return _init
};

1456. 定长子串中元音的最大数目

思路

首先计算初始窗口 [0,k] 中元音字母的个数,然后将窗口向右移动,判断窗口进入和移出的字母情况,是元音字母 count +1, 否则 -1,最后取 max 和 count 的较大值。

代码

ts 复制代码
const isVowel = (c) => "aeiou".includes(c)

function maxVowels(s: string, k: number): number {
  let i = 0
  let max = 0
  let count = 0

  for (; i < k; i++) {
    let cur = s[i]

    if (isVowel(cur)) {
      count++
    }
  }

  max = Math.max(count, max)

  for(; i < s.length; i++) {
    let cur = s[i]
    let last = s[i - k]

    if (isVowel(cur)) {
      count++
    }

    if (isVowel(last)) {
      count--
    }

    max = Math.max(count, max)
  }

 return max
};

1004. 最大连续1的个数 III

思路

双指针,找出一个最长的子数组,如果该子数组内最多允许有 K 个 0,这个数组长度就是最大连续 1 的个数。

代码

ts 复制代码
function longestOnes(nums: number[], k: number): number {
  let res = 0
  let right = 0
  let left = 0
  let zeros = 0

  while(right < nums.length) {
    if (nums[right] === 0) {
      zeros++
    }

    while(zeros > k) {
      if (nums[left++] === 0) {
        zeros--
      }
    }
        
    res = Math.max(res, right - left + 1)
    right++
  }

  return res
};

1493. 删掉一个元素以后全为 1 的最长子数组

思路

双指针,判断指针内之和是否小于左右指针的差,如果小于就把左指针向右移动,最后返回右指针减去左指针再减一。

代码

ts 复制代码
function longestSubarray(nums: number[]): number {
  let res = 0
  let left = 0
  let right = 0

  for (; right < nums.length; right++) {
    res += nums[right]

    if (res < right - left) {
      res -= nums[left]
      left++
    }
  }

  return right - left - 1
};
相关推荐
宇柔6 分钟前
Day5:移除链表元素
数据结构·算法·链表
Amor风信子23 分钟前
【力扣】2376. 统计特殊整数
算法·leetcode·职场和发展
极客小张24 分钟前
基于正点原子Linux开发板的智能监控与家电控制系统设计:深度解析Video4Linux和TCP/IP技术栈
linux·运维·c++·物联网·网络协议·tcp/ip·算法
JustCouvrir1 小时前
代码随想录算法训练营Day5
算法
一只特立独行的猪6111 小时前
Java面试——集合篇
java·开发语言·面试
让开,我要吃人了2 小时前
HarmonyOS开发实战(5.0)实现二楼上划进入首页效果详解
前端·华为·程序员·移动开发·harmonyos·鸿蒙·鸿蒙系统
周哈里窗的编程2 小时前
CSP-CCF★201912-2回收站选址★
c++·算法·图论
SpongeG3 小时前
数据结构第三周做题总结_链表
数据结构·算法·链表
everyStudy3 小时前
前端五种排序
前端·算法·排序算法
甜兒.4 小时前
鸿蒙小技巧
前端·华为·typescript·harmonyos