每日算法(第十五期)

这篇具有很好参考价值的文章主要介绍了每日算法(第十五期)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先来回顾一下上期的问题及答案:

「有效的括号」(Valid Parentheses)。

题目描述: 给定一个只包含字符 '(', ')', '{', '}', '[' 和 ']' 的字符串 s,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。

  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

解题思路:

  • 使用栈来匹配括号。

  • 遍历字符串,如果当前字符是左括号('(', '[', '{'),则将其入栈。

  • 如果当前字符是右括号(')', ']', '}'),则从栈顶取出一个字符,如果它与当前字符匹配,则继续遍历;否则返回 false。

  • 最后,检查栈是否为空,如果为空则表示所有括号都匹配成功,返回 true;否则返回 false。

以下是对应的实现:

function isValid(s) {
  const stack = [];

  for (let i = 0; i < s.length; i++) {
    const char = s[i];
    if (char === '(' || char === '[' || char === '{') {
      stack.push(char);
    } else {
      if (stack.length === 0) {
        return false;
      }
      const top = stack.pop();
      if (
        (char === ')' && top !== '(') ||
        (char === ']' && top !== '[') ||
        (char === '}' && top !== '{')
      ) {
        return false;
      }
    }
  }

  return stack.length === 0;
}

时间复杂度分析:

  • 遍历字符串的时间复杂度为 O(n),其中 n 是字符串的长度。

空间复杂度分析:

  • 最坏情况下,栈的深度与字符串的长度相等,所以空间复杂度为 O(n)。

例如:

console.log(isValid("()")); // true
console.log(isValid("()[]{}")); // true
console.log(isValid("(]")); // false
console.log(isValid("([)]")); // false
console.log(isValid("{[]}")); // true

在上述例子中,给定字符串分别为 "()"、"()[]{}"、"(]"、"([)]" 和 "{[]}"。通过调用 isValid 函数判断字符串是否有效。有效的字符串返回 true,无效的字符串返回 false。

2023年6月3日

「最大子序和」(Maximum Subarray)。

题目描述: 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 提示: 使用动态规划的思想解决问题。

定义两个变量 maxSum 和 currSum,分别表示最大和和当前连续子数组的和,初始化为数组的第一个元素。

遍历数组,对于每个元素,计算当前元素加入之后的连续子数组的和,与当前元素自身进行比较,取较大的值作为新的 currSum。

同时,更新 maxSum,记录最大的和。

最终返回 maxSum。

要求的结果:

console.log(maxSubArray([-2, 1, -3, 4, -1, 2, 1, -5, 4])); // 6
console.log(maxSubArray([1])); // 1
console.log(maxSubArray([5, 4, -1, 7, 8])); // 23

上面问题的答案会在第二天的公众号推文中公布,大家可以关注公众号:程序员每日三问,第一时间获得推送内容。

学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题(死磕自己,愉悦大家) 希望大家在这浮夸的程序员圈里保持冷静,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。文章来源地址https://www.toymoban.com/news/detail-469815.html

到了这里,关于每日算法(第十五期)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法通关村第十五关——从10亿数字中寻找最小的100万个数字

    本题有三种常用的方法,一种是先排序所有元素,然后取出前100万个数,该方法的时间复杂度为O(nlogn)。很明显对于10亿级别的数据,这么做时间和空间代价太高。 第二种方式是采用选择排序的方式,首先遍历10亿个数字找最小,然后再遍历一次找第二小,然后再一次找第三小

    2024年02月11日
    浏览(25)
  • [Go版]算法通关村第十五关青铜——用4KB内存寻找重复元素

    在 海量数据 中,此时普通的数组、链表、Hash、树等等结构有无效了 ,因为内存空间放不下了。而常规的递归、排序,回溯、贪心和动态规划等思想也无效了,因为执行都会超时,必须另外想办法。这类问题该如何下手呢?这里介绍三种非常典型的思路: 使用位存储 ,使用

    2024年02月11日
    浏览(33)
  • [Go版]算法通关村第十五关黄金——继续研究超大规模数据场景的问题

    在 海量数据 中,此时普通的数组、链表、Hash、树等等结构有无效了 ,因为内存空间放不下了。而常规的递归、排序,回溯、贪心和动态规划等思想也无效了,因为执行都会超时,必须另外想办法。这类问题该如何下手呢?这里介绍三种非常典型的思路: 使用位存储 ,使用

    2024年02月10日
    浏览(31)
  • 算法通关村第十五关——从40亿个数中产生一个不存在的数的处理方法

    题目要求 :给定一个输入文件,包含40亿个非负整数,请设计一个算法,产生一个不存在该文件中的整数,假设你有1GB的内存来完成这项任务。**** 解题中心思想 :存储的不是这40亿个数据本身,而是其对应的位置。 本题不用写代码,能把方法过程说清楚就可以。 方法 :

    2024年02月09日
    浏览(30)
  • 数据库管理-第八十五期 19c OCM之路-准备与环境篇(20230626)

    从去年就有消息传出,OCM将从12c升级到19c,今年12c OCM停考,从业内大佬和OU处了解到其实今年3月30日已经开考19c OCM了,但是时至今日Oracle官网上依然没有更新19c OCM的相关信息: 然而前两天还在使用搜索引擎再次查找相关信息的时候,偶然间发现,19c OCM的相关信息已经悄然有

    2024年02月11日
    浏览(34)
  • 数据库管理-第七十五期 手把手教你搭19c RAC(20230516)

    在这篇文章里面,我将奉上保姆级Oracle 19c RAC搭建攻略,包括操作系统基础配置、存储多路径配置、GI与DB安装、版本升级等。 这是一套用于我这X9M灾备环境的数据库,包含4台服务器(80C768G),使用OracleLinux 7.9操作系统,(本文的部分内容比如IP是经过脱敏的),具体环境如

    2024年02月05日
    浏览(30)
  • 【AI视野·今日Robot 机器人论文速览 第五十五期】Mon, 16 Oct 2023

    AI视野 ·今日CS.Robotics 机器人学论文速览 Mon, 16 Oct 2023 Totally 27 papers 👉 上期速览 ✈更多精彩请移步主页 Interesting: 📚 ***AcTExplore, 对于未知物体的主动触觉感知。基于强化学习自动探索物体的表面形貌,增量式重建。(from 马里兰大学 ) website:http://prg.cs.umd.edu/AcTExplore 📚 机器人

    2024年02月08日
    浏览(34)
  • 操作系统之FCFS - 先来先服务算法

    先来先服务调度算法是最简单的调度方法。 基本原则:按照进程进入就绪队列的先后次序进行选择。对于进程调度来说, 一旦一个进程得到处理机,它就一直运行下去,直到该进程完成任务或者因等待某事件而不能继续运行,才会让出处理机 。先来先服务调度算法属于非剥

    2024年02月08日
    浏览(38)
  • 操作系统进程调度算法——先来先服务、时间片轮转、优先级调度算法

    (1)算法内容: 先来先服务调度算法是一种最简单的调度算法,可以应用于高级调度也可以运用于低级调度。高级调度时,FCFS调度算法按照作业进入后备作业队列的先后顺序选择作业进入内存,即先进入后备作业队列的作业被优先选择进入内存,然后为选中的作业创建进程

    2023年04月21日
    浏览(29)
  • 第十五章 奇异值分解

    奇异值分解(SVD)是一种矩阵因子分解方法。 任意一个 m × n mtimes n m × n 矩阵,都可以表示为三个矩阵的乘积(因子分解)形式,分别是 n n n 阶正交矩阵、由降序排列的非负的对角线元素组成的 m × n mtimes n m × n 的矩形对角矩阵和 n n n 阶正交矩阵。 矩阵的奇异值分解一定

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包