二十天刷leetcode【hot100】算法- day1[前端Typescript]

news2024/11/16 18:27:10

哈希表

1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
在这里插入图片描述
链接

题解

该题目的关键在于遍历循环数组,在遍历的过程中,记录目前值与target的差值,且使用map记录差值情况,若存在差值,则直接返回差值

function twoSum(nums: Array<number>, target: number) {
  const len = nums.length;
  const hashMap = new Map();
  for(let i = 0; i < len; i++) {
      // 计算当前值与target的差值
      const targetNew = target - nums[i];
      if (hashMap.has(targetNew)) {
          // 如果存在该差值,则直接返回 [该差值的下标, 与当前值的下标]
          return [hashMap.get(targetNew), i];
      } else {
          // 暂时不存在差值,存入当前值的下标
          hashMap.set(nums[i], i);
      }
  }
};

// const arr = twoSum([3,2,4], 6);
// console.log({ arr });

2. 字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
在这里插入图片描述
链接

题解

该题目在于将每一项数据根据Unicode编码排序,异位词经过排序后的字符串会相等,后使用map记录数据即可。

function groupAnagrams(strs: string[]): string[][] {
  const len = strs.length;
  // 讲异位词归类成一个数组 {'ab': ['ab', 'ba']}
  const hashMap = new Map<string, string[]>();
  // 遍历字符串数组
  for(let i = 0; i < len; i++) {
      const temp = strs[i];
      // 字符串转化为数组 ['b', 'a']
      const newStr = (Array.from(temp) as string[])
                      // 按Unicode编码排序 ['a', 'b']
                      .sort((a, b) =>  a.charCodeAt(0) - b.charCodeAt(0))
                      // 拼接成字符串 ['ab']
                      .reduce((a, b) => `${a}${b}`, '');
      if (hashMap.has(newStr)) {
          // 如果存在异位词,则推进数组
          (hashMap.get(newStr) || []).push(temp);
      } else {
          // 不存在异位词,则set初始化数组
          hashMap.set(newStr, [temp]);
      }
  }
  const res: string[][] = [];
  // 输出结果
  hashMap.forEach((value) => {
      res.push(value);
  });
  return res;
};

// const arr = groupAnagrams(['abc', 'cab', 'de', 'ed']);
// // { arr: [ [ 'abc', 'cab' ], [ 'de', 'ed' ] ] }
// console.log({ arr });

3.最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
在这里插入图片描述
链接

题解:

在这里插入图片描述

function longestConsecutive(nums: number[]): number {
  // 去重 [100, 4, 4, 200, 1, 3, 2] => [100, 4, 200, 1, 3, 2]
  let num_set: Set<number> = new Set([...nums]);
  // 记录当前最长连续序列长度
  let longestStreak = 0;

  for (const num of num_set) {
      // 遍历
      if (!num_set.has(num - 1)) {
          // 如果不存在比当前值小1的值,则当前值作为起点
          // 如100, 1可以作为起点
          let currentNum = num;
          // 记录当前最长连续序列长度
          let currentStreak = 1;

          while (num_set.has(currentNum + 1)) {
              // 遍历,找比当前值大1的数
              currentNum += 1;
              currentStreak += 1;
          }
          // 更新最大长度
          longestStreak = Math.max(longestStreak, currentStreak);
      }
  }

  return longestStreak;   
};

// const num = longestConsecutive([100, 4, 4, 200, 1, 3, 2]);
// // { num: 4 }
// console.log({ num });

指针

4.移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。
在这里插入图片描述

题解

在这里插入图片描述

// 快排思想
function moveZeroes(nums: Array<number>) {
  if (nums.length === 1) {
    return nums;
  }
  let left = 0;
  for (let right = 0; right < nums.length; right++) {
    if (nums[right] !== 0) {
      // 右边不等于0
      if (nums[left] === 0) {
          // 左边等于0
          [nums[right], nums[left]] = [nums[left], nums[right]];
      }
      // 找到了右边不等于0的目标元素,移动左指针寻找等于0的元素
      left++;
    }
  }
  return nums;
};

// const arr = moveZeroes([0, 1, 0, 3, 12]);
// // { num: 4 }
// console.log({ arr });

5.盛水最多的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。

说明:你不能倾斜容器。
在这里插入图片描述
链接

题解

左右指针法,每次移动短的指针能才有机会使容纳的水变多,因为左右指针收窄时,形成的容器的底是变小的,而能存多少水,容器的高也是一个决定性因素,根据木桶原理,短的木板决定水桶能装多少水,在底变小的情况下,移动短的指针有机会遇到更长的木板,使得容积变大。移动过程中,更新最大值即可。

function maxArea(height: Array<number>): number {
  let left = 0, right = height.length - 1;
  let res = 0;
  while(left < right) {
      // 底
      const bottom = right - left;
      // 高
      const h = Math.min(height[left], height[right]);
      // 更新最大值
      res = Math.max(res, bottom * h);
      if (height[left] > height[right]) {
          // 右边小,移动小的
          right--;
      } else {
          // 左边小,移动小的
          left++;
      }
  }
  return res;
};

// const num = maxArea([1, 8, 6, 2, 5, 4, 8, 3, 7]);
// // { num: 49 }
// console.log({ num });

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

适用于个人使用的十大数据恢复工具:综合指南

有许多数据恢复工具和软件可用于帮助恢复丢失或损坏的文件。通过了解您的需求并考虑这里探讨的工具&#xff0c;您将能够选择最佳的数据恢复软件&#xff0c;并希望找回您丢失的宝藏。在本综合指南中&#xff0c;我们将探索个人使用的十大数据恢复工具&#xff0c;重点介绍它们…

ESP32人脸识别开发- 基础介绍(一)

一、ESP32人脸识别的方案介绍 目前ESP32和ESP32S3都是支持的&#xff0c;官方推的开发板有两种&#xff0c;一种 ESP-EYE ,没有LCD 另一种是ESP32S3-EYE,有带LCD屏 二、ESP32人脸识别选用ESP32的优势 ESP32S3带AI 加速功能&#xff0c;在人脸识别的速度是比ESP32快了不少 | S…

鸿蒙 IM 即时通讯开发实践,融云 IM HarmonyOS NEXT 版

融云完成针对“纯血鸿蒙”操作系统的 SDK 研发&#xff0c;HarmonyOS NEXT 版融云 IM SDK 已上线&#xff0c;开发者可在“鸿蒙生态伙伴 SDK 市场”查询使用。 发挥 20 年通信行业技术积累和领创品牌效应&#xff0c;融云为社交、娱乐、游戏、电商、出行、医疗等各行业提供专业…

【深澜计费管理系统存在任意文件读取漏洞复现和检测脚本】

目录 一、漏洞介绍 二、poc利用 三、批量检测脚本 一、漏洞介绍 深澜计费管理系统存在任意文件读取漏洞。攻击者可以利用这个漏洞读取服务器上的任何文件,包括配置文件、源代码文件和敏感数据等。 二、poc利用 360 quake&#xff1a; favicon: "1fc27943c1f0d9b54cc…

modin,一个强大的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个强大的 Python 库 - modin。 Github地址&#xff1a;https://github.com/modin-project/modin 在数据科学和机器学习的领域中&#xff0c;Pandas 是一个非常流行的数据处理…

Excel第33享:借助易用宝将多个表格合并到一个表格

1、需求描述 现有3个销售数据的Excel表格&#xff0c;希望将其整合到一个表格里&#xff0c;如下图所示。 2、具体操作 &#xff08;1&#xff09;下载一个插件“易用宝”。 下载地址&#xff1a;最新版下载 | Excel易用宝 如果本地址失效&#xff0c;可以直接百度搜索“易…

2024年企业电脑加密系统排名|电脑加密系统TOP8

随着信息技术的发展&#xff0c;数据安全变得尤为重要。企业需要可靠的加密系统来保护敏感信息不受内部或外部威胁。以下是我为您推荐的8款企业电脑加密系统&#xff0c;都是知名的产品。 1.安企神系统 简介&#xff1a;安企神是一款专注于企业数据安全管理的综合性软件&#…

你的网站访客来自何方?GoAccess地理分析工具告诉你!

你的网站访客来自何方?GoAccess地理分析工具告诉你! 致读者: 点击上方 “雪之梦技术驿站” → 点击右上角“ … ”→ 点选“设为星标★ ” 加上星标,就不会找不到我啦!想象一下,你站在世界地图前,手中的放大镜缓缓移动,寻找着那些隐藏在数字海洋中的神秘岛屿——IP地址…

下一个十年能否赚到钱,就看你消化得了这篇文章不

所有的互联网创业者在2024年都会迎来前所未有的挑战&#xff0c;因为中国经济正在发生翻天覆地的变化&#xff0c;人口红利的消失&#xff0c;流量红利的消失&#xff0c;也就是说我们从一个增量时代到存量时代的过渡中&#xff0c;所以这两年我们可以清晰的看到很多传统老板正…

【传知代码】一款轻量级的隐私保护推荐系统(论文复现)

在当今信息爆炸的时代&#xff0c;个性化推荐系统在我们的日常生活中扮演着越来越重要的角色。然而&#xff0c;随着个人数据的广泛收集和利用&#xff0c;隐私保护成为了一个不可忽视的挑战。为了平衡推荐系统的效用与用户隐私的保护&#xff0c;一款轻量级的隐私保护推荐系统…

装win7出现0x0000007b蓝屏原因分析及解决方法

最近有网友问我装win7出现0x0000007b蓝屏怎么办&#xff1f;0x0000007b电脑蓝屏通常情况是硬盘的存储控制器驱动加载错误导致故障。出现0x0000007b蓝屏代码的原因有很多比如硬盘模式、安装的系统没有集成相关的磁盘控制器驱动等&#xff0c;下面小编就教大家装win7出现0x000000…

VFS(虚拟文件系统)是什么,有真实的文件系统吗?

文章目录 1 VFS&#xff08;虚拟文件系统&#xff09;是什么1.1 VFS 的设计目的 2 VFS 的工作原理2.1 VFS 的文件操作流程 3 真实的文件系统3.1 常见的真实文件系统3.2 真实文件系统与 VFS 的关系 4 总结封面 1 VFS&#xff08;虚拟文件系统&#xff09;是什么 虚拟文件系统&a…

水论文如何找创新,优秀者模仿,末尾有例子示范_来自B站水论文的程序猿

系列文章目录 文章目录 系列文章目录一、水论文如何找创新关键在“找”1、相似领域找2、找到后3、如何稍微改动4、 自己领域找 二、示例 一、水论文如何找创新关键在“找” 1、相似领域找 比如某人研究视频描述中的单句视频描述&#xff0c;他可以去密集视频描述领域找相关论…

springMVC中从Excel文件中导入导出数据

目录 1. 数据库展示2. 导入依赖3. 写方法3.1 导入数据3.2 导出数据 4. 效果5. 不足6. 参考链接 1. 数据库展示 2. 导入依赖 pom.xml <!--文件上传处理--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId>&…

邻接表(链式存储)实现图的存储

目录 一. 前言 二. 用邻接表创建无向网的完整源代码 一. 前言 无向图邻接表的形式如下所示&#xff1a; 其中类如v1的结点为头结点&#xff0c;头结点后面的结点为边结点&#xff0c;表示与头结点中顶点相连的边的信息。 采用邻接表创建无向网的算法思路&#xff1a; 1&#…

GPU爆显存 | Windows下杀死GPU进程释放显存

文章目录 0 问题引入1 解决方案 0 问题引入 深度学习的时候&#xff0c;用CUDA加速训练了&#xff0c;但是进程没有完全结束&#xff0c;再跑的时候爆显存了。 1 解决方案 查看当前的GPU进程 nvidia-smi通过如下命令来杀死指定的进程。 taskkill /PID PID号 /F //例如&am…

单工和双工、半双工和全双工、波特率

目录 一、单工和双工 二、半双工和全双工 三、波特率 &#x1f308;你好呀&#xff01;我是 程序猿 &#x1f30c; 2024感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff0c;共同成长&#xff01; 一、单工和双工 单工&#xff1a…

ComfyUI: 报EP Error错误(onnxruntime)

&#x1f936;背景描述 在使用反推提示词的时候&#xff0c;按照上一篇介绍的方法是可以正常使用的。 但是看后台的时候&#xff0c;发现有一个错误&#xff1a; *************** EP Error *************** EP Error D:\a\_work\1\s\onnxruntime\python\onnxruntime_pybind_s…

分布式领域扩展点设计稿

分布式领域扩展点设计稿 背景坐标设计理念设计图Quick Start相关组件 背景 随着交易业务和基础知识的沉淀&#xff0c;愈发觉得扩展点可以在大型交易分布式架构中可以做更多的事情。 经过一个月的思考&#xff0c;决定将 单点领域扩展点&#xff08;savior-ext&#xff09; 从…

基于SpringBoot+Vue的在线学籍管理系统(带1w+文档)

基于SpringBootVue的在线学籍管理系统(带1w文档) 基于SpringBootVue的在线学籍管理系统(带1w文档) 计算机技术快速发展的同时也促进信息化发展。当下在线学籍管理规模不断扩大&#xff0c;新型管理模式也正逐步推进&#xff0c;推动其信息化发展可以为其改革、进步提供保障。信…