当前位置: 首页 > news >正文

每日算法(第十四期)

儿童节了也要好好学习鸭。

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

「反转链表」(Reverse Linked List)。

题目描述: 反转一个单链表。

以下是对应的JavaScript实现:

function reverseList(head) {let prev = null;let curr = head;while (curr !== null) {let nextTemp = curr.next;curr.next = prev;prev = curr;curr = nextTemp;}return prev;
}

解题思路:

  • 使用迭代的方法反转链表。

  • 初始化两个指针 prevcurr,分别指向前一个节点和当前节点。

  • 在迭代过程中,用一个临时变量 nextTemp 保存当前节点的下一个节点。

  • 将当前节点的指针指向前一个节点,然后更新 prevcurr 的位置。

  • 最终返回反转后的链表的头节点。

时间复杂度分析:

  • 迭代过程中,需要遍历整个链表一次,时间复杂度为 O(n),其中 n 是链表的长度。

空间复杂度分析:

  • 只使用了常量级别的额外空间,所以空间复杂度为 O(1)。

例如:

function ListNode(val, next) {this.val = val;this.next = next;
}const head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);const reversedList = reverseList(head);
console.log(reversedList); // { val: 5, next: { val: 4, next: { val: 3, next: { val: 2, next: { val: 1, next: null } } } } }

在上述例子中,给定一个链表 1->2->3->4->5,通过调用 reverseList 函数将链表进行反转。最终得到的反转后链表为 5->4->3->2->1。

2023年6月2日

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

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

有效字符串需满足:

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

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

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

提示如下:

  • 使用栈来匹配括号。

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

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

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

要求的结果:

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

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

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

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

http://www.lryc.cn/news/90334.html

相关文章:

  • uboot的使用
  • 学习HCIP的day.09
  • Electron-Builder Windows系统代码签名
  • 数据分析概述
  • 网络编程初识
  • 软考A计划-试题模拟含答案解析-卷十二
  • I.MX RT1170加密启动详解(1):Encrypted Boot image组成
  • Linux---用户切换命令(su命令、sudo命令、exit命令)
  • 手机图片怎么提取文字?高效渠道一览
  • Elasticsearch 聚合数据结果不精确问题解决方案
  • Qt经典面试题:Qt开启线程的几种方式
  • 使用chartgtp写Android代码
  • 【C++】4.jsoncpp库:jsoncpp库安装与使用入门
  • HTML、CSS、 JavaScript介绍(二)
  • 高效益的淘客APP要怎么开发,需要哪些功能
  • Java基础--->IO流(2)【常见IO模型】
  • JavaScript let 和 const
  • 云原生下多集群的监控系统背景、架构设计与实现
  • 利用OpenCV处理图像
  • 【面试实战】SpringIoC、AOP、MVC面试实战
  • [Redis 分布式锁 ]
  • 如何创建Vue实例?Vue实例有哪些属性和方法
  • InnoDB Cluster集群Mysql Router代理层最佳实践
  • RabbitMQ系列-概念及安装
  • 进程间通信之共享内存
  • 网络连接中的舔狗协议
  • 一分钟了解乐观锁、悲观锁、共享锁、排它锁、行锁、表锁以及使用场景
  • 【C++】C++ 中的 IO 流
  • QFuture的使用
  • 通过dockerfile将nginx、前端和后端封装成一个镜像