首页 > 编程语言 >【数据结构与算法】栈相关算法题(长期更新)

【数据结构与算法】栈相关算法题(长期更新)

时间:2023-07-10 20:35:57浏览次数:38  
标签:console log s1 number 更新 算法 pop push 数据结构

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: 如果确定循环次数使用 for
  while (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. 有效的括号


标签:console,log,s1,number,更新,算法,pop,push,数据结构
From: https://www.cnblogs.com/wx980416/p/17542239.html

相关文章

  • 「学习笔记」KMP 算法
    前置知识前缀是指从串首开始到某个位置\(i\)结束的一个特殊子串.真前缀指除了\(S\)本身的\(S\)的前缀.举例来说,字符串abcabeda的所有前缀为{a,ab,abc,abca,abcab,abcabe,abcabed,abcabeda},而它的真前缀为{a,ab,abc,abca,abcab,abcabe,abcabed}.......
  • 算法细节系列(1):Java swap
    算法细节系列(1):Javaswap问题在C++中,swap算法可以用指针来实现,因此在Java中,如果采用如下代码来对两个数字进行交换时,也不会影响两个对象的值。publicclassTestSwap{publicstaticvoidmain(String[]args){inta=2;intb=3;System.out.prin......
  • 文心一言 VS 讯飞星火 VS chatgpt (57)-- 算法导论6.4 1题
    文心一言VS讯飞星火VSchatgpt(57)--算法导论6.41题一、参照图6-4的方法,说明HEAPSORT在数组A=(5,13,2,25,7,17,20,8,4)上的操作过程。文心一言:下面是HEAPSORT在数组A=(5,13,2,25,7,17,20,8,4)上的操作过程:调用BUILD-MAX-HEAP函数,将数组A转换为最大堆。将堆顶元......
  • 六月更新 | MeetingOps:让有效协作与高效会议共同发生在云端
    腾讯云CODING6月新功能上线啦!本次更新,我们给用户提供了更便捷的会议协同、事项管理等重磅能力。以下是CODING新功能速递,快来看看是否有您期待已久的功能特性:01项目迭代支持会议协作为了满足更多研发协作场景需求,腾讯云CODING与「腾讯会议」产品联合,进一步强化研发与会......
  • vue3封装echarts组件数据更新不同步问题
    vue3封装echarts组件数据更新不同步问题背景:​ 记录一下项目中遇到的bug,在vue3+echarts环境下,为了方便使用,我将echarts封装成组件使用,使用的时候只需要把对应的值传入给chart组件就行,但是在传入真实数据的时候遇到了问题,就是传入value值与图表组件显示的数值不一致。(如图)......
  • c#实现SharedMatting抠图算法
    内容简介      将AlphaMatting抠图算法由c++版本移植至c#环境。主要采用OpenCV的C#版本Emgu取代c++支撑的OpenCV。 参考资料http://www.inf.ufrgs.br/~eslgastal/SharedMatting/这个网页是算法的论文介绍页,可以从该网页下载到论文原文以及测试用图以及linux下的De......
  • 图解算法数据结构
    算法复杂度1.算法复杂度旨在输入数据量N的情况下,算法的时间和空间使用情况,体现算法运行使用的时间和空间随数据大小N而增大的速度。 算法复杂度主要可以从时间,空间两个角度评价:时间:假设各操作的运行时间为固定常数,统计算法运行的计算操作的数量,以代表算法运行所需时间......
  • 使用加密算法时报错:ModuleNotFoundError: No module named ‘Crypto‘
    解决办法:安装Crypto模块,执行 pipinstallCrypto ,安装成功后,再执行命令,还是报上面的错误第一步:在python3(或者python虚拟环境)目录下的/Lib/site-packages/目录下找到crypto、crypto-1.4.1.dist-info目录,将crypto首字母改为大写,即修改名称为Crypto、Crypto-1.4.1.d......
  • python图片去重复算法
    importosfromimagededup.methodsimportPHash#pipinstallimagededupphasher=PHash()defprocess_file(img_path):#生成图像目录中所有图像的二值hash编码encodings=phasher.encode_images(image_dir=img_path)duplicates=phasher.find_duplica......
  • MFCC 算法及 C 实现
    参考https://blog.csdn.net/weixin_38468077/article/details/1027095101.MFCC是做什么?1.1梅尔频谱人耳能听到的声音频率范围是20-20000Hz,但是人耳对频率感知并不是线性的,而是近似于......