【数据结构与算法】栈算法题

TS 实现栈

interface IStack<T> {push(e: T): void;pop(): T | undefined;peek(): T;isEmpyt(): boolean;size(): number;
}// implements: 实现接口, 一个类可以实现多个接口
class ArrayStack<T> implements IStack<T> {private data: T[] = []; // private: 私有属性,只能在类内部访问// push 方法:将一个元素压入到栈中push(e: T) {this.data.push(e);}// pop 方法:从栈中取出一个元素pop(): T | undefined {return this.data.pop();}// peek 方法:查看栈顶元素peek(): T {return this.data[this.data.length - 1];}// isEmpyt 方法:判断栈是否为空isEmpyt(): boolean {return this.data.length === 0;}// size 方法:返回栈中元素的个数size(): number {return this.data.length;}
}// 测试样例
const s1 = new ArrayStack<string>();
s1.push('1');
s1.push('2');
s1.push('3');console.log(s1.peek());
console.log(s1.pop());
console.log(s1.peek());
console.log(s1.size());
console.log(s1.isEmpyt());
const res = s1.pop();
res?.split('');export { ArrayStack };

十进制转二进制

import { ArrayStack } from './01-Stack';// 十进制转二进制: 除2取余法 先取余入栈最后再出栈
// 比如 35 转二进制
// 35 % 2 = 1
// 17 % 2 = 1
// 8 % 2 = 0
// 4 % 2 = 0
// 2 % 2 = 0
// 1 % 2 = 1
// 最后结果则为:101011
function decimalToBinary(decNumber: number): string {const stack = new ArrayStack<number>();let number = decNumber;// whlle:如果不确定循环条件使用 while// for: 如果确定循环次数使用 forwhile (number > 0) {const result = number % 2; // 余数stack.push(result); // 入栈number = Math.floor(number / 2); // 商}let binaryString = '';// 依次出栈结果则为二进制while (!stack.isEmpyt()) {binaryString += stack.pop();}return binaryString;
}console.log(decimalToBinary(35)); // 101011
console.log(decimalToBinary(100));
export {};

Leetcode 20.有效的括号

20. 有效的括号image

// 有效的括号
// 比如 ()[]{} 是有效的
// 比如 ([)] 是无效的
//
function isValid(s: string): boolean {// 长度为奇数,肯定是无效的if (s.length % 2 === 1) {return false;}const stack: string[] = [];// 知道循环次数使用 forfor (let i = 0; i < s.length; i++) {const c = s[i]; // 取当前字符switch (c) {case '(':stack.push(')');break;case '[':stack.push(']');break;case '{':stack.push('}');break;default: // 其他情况为右括号// 如果栈顶元素不等于当前字符if (stack.pop() !== c) {return false;}break;}}// 最后:如果栈为空,说明所有的左括号都有对应的右括号// 否则,说明有左括号没有对应的右括号return stack.length === 0;
}
console.log(isValid('()[]{}')); // true
console.log(isValid('([)]')); // false

使用字典进行优化代码结构:

// 字典优化
function isValidMap(s: string): boolean {// 长度为奇数,肯定是无效的if (s.length % 2 === 1) {return false;}const stack: string[] = [];const map: { [key: string]: string } = {'(': ')','[': ']','{': '}',};// 知道循环次数使用 forfor (let i = 0; i < s.length; i++) {const c = s[i]; // 取当前字符if (map[c]) {stack.push(map[c]);} else {if (stack.pop() !== c) {return false;}}}// 最后:如果栈为空,说明所有的左括号都有对应的右括号// 否则,说明有左括号没有对应的右括号return stack.length === 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/18966.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring详解(学习总结)

目录 一、Spring概述 &#xff08;一&#xff09;、Spring是什么&#xff1f; &#xff08;二&#xff09;、Spring框架发展历程 &#xff08;三&#xff09;、Spring框架的优势 &#xff08;四&#xff09;、Spring的体系结构 二、程序耦合与解耦合 &#xff08;一&…

在Windows server 2012上使用virtualBox运行CentOS7虚拟机,被强制暂停

文章目录 问题场景排查过程处理解决事后反思 问题场景 我们的平台服务使用docker部署&#xff0c;使用docker-compose进行管理&#xff0c;部署到CentOS7的服务器里平台部署到客户环境时&#xff0c;一小部分客户&#xff0c;使用自己机房或单独的服务器。很多客户不愿意采购新…

【嵌入式Linux项目】基于Linux的全志H616开发板智能垃圾桶项目

目录 一、功能需求 二、涵盖的知识点 1、wiringPi库下的相关硬件操作函数调用 2、线程&#xff08;未使用互斥锁和条件&#xff09; 3、父子进程 4、网络编程&#xff08;socket套接字&#xff09; 5、进程间通信&#xff08;共享内存和信号量&#xff09; 三、开发环境…

Elasticsearch原理剖析

一、 Elasticsearch结构 Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成&#xff0c;如下图所示&#xff0c;模块说明如表下所示。 说明如表&#xff1a; 名称说明ClientClient使用H…

OpenCV 入门教程:颜色空间转换

OpenCV 入门教程&#xff1a;颜色空间转换 导语一、颜色空间的基本概念1.1 RGB颜色空间1.2 灰度颜色空间1.3 其他颜色空间 二、颜色空间转换三、示例应用3.1 提取图像的色彩通道3.2 调整图像的亮度和对比度 总结 导语 在图像处理和计算机视觉领域&#xff0c;颜色空间转换是一…

OpenCV(图像处理)-图片搜索

图片搜索 1.知识介绍2.实现流程2.1 计算特征点与描述子2.2 描述子的匹配2.3 求出单应性矩阵并画出轮廓2.4 将特征点标出 此篇博客作者仍在探索阶段&#xff0c;还有一些模糊的概念没有弄懂&#xff0c;请读者自行分辨。 1.知识介绍 Opencv进行图片搜索需要的知识有&#xff1…

nginx漏洞修复之检测到目标URL存在http host头攻击漏洞

漏洞说明 为了方便的获得网站域名&#xff0c;开发人员一般依赖于HTTP Host header。例如&#xff0c;在php里用_SERVER[“HTTP_HOST”]。但是这个header是不可信赖的&#xff0c;如果应用程序没有对host header值进行处理&#xff0c;就有可能造成恶意代码的传入。 解决方法…

前端学习——css盒子模型、css3新特性、伪类、布局0711TODO

样式还是得具体使用才能理解&#xff0c;不然会忘记也理解不透彻&#xff1b;还有定位&#xff0c;元素溢出&#xff0c;浮动&#xff0c;布局水平&垂直对齐&#xff1a; css3新特性 1过渡 2 动画 3 2D、3D转换 伪类 三种定位方式 弹性布局/栅格布局

Unity | 向量、矩阵、齐次坐标

目录 一、向量点乘&叉乘 1.点乘 1.1 公式 1.2 几何意义 2.叉乘 2.1 公式 2.2 几何意义 二、矩阵点乘&叉乘 1.矩阵 2.矩阵的点乘 3.矩阵的叉乘 三、矩阵旋转 四、齐次坐标 一、向量点乘&叉乘 1.点乘 又称内积&#xff0c;结果是个标量&#xff0c; 1…

opencv读取图像数据并修改通道转变内存连续

opencv读取图像数据并修改通道转变内存连续

基于vscode的ros开发

Part1前言 ROS&#xff08;机器人操作系统&#xff09;是一个开源的机器人软件平台&#xff0c;旨在提供一套通用的工具和库&#xff0c;帮助开发人员创建机器人应用程序。ROS提供了用于构建机器人系统的库、工具、驱动程序、通信协议和软件包管理系统。 以下是ROS的一些主要特…

安科瑞智能母线监控在数据中心的应用

引言&#xff1a; 近年来&#xff0c;随着母线槽在建筑及工厂的配电中越来越广泛&#xff0c;母线槽场景运用的越多&#xff0c;随着数据中心建设的快速发展和更高需求&#xff0c;智能母线系统逐渐被应用于机房的末端配电中&#xff0c;具有电流小、插接方便、智能化程度高等…