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

leetCode算法第一天

在这里插入图片描述

今天开始刷算法题,提升自己的算法思维和代码能力,加油!

文章目录

    • 无重复字符的最长子串
    • 最长回文子串
    • N形变换
    • 字符串转换整数

无重复字符的最长子串

leetCode链接 https://leetcode.cn/problems/longest-substring-without-repeating-characters/
解题思路有两种。

  1. 扩散算法
    从i开始,分别尝试i (i + 1)和i(i - 1) 然后是(i - 1)i(i + 1) 以此类推,从中间扩散的方式进行判断是否无重复字符串。
  2. 从最长的开始适配
    先判断整个字符串是否满足,然后是length - 1 的字符串(有两个),然后是(length - 2)的字符串,有三个,以此类推,只要找到了,就退出循环,返回结果。

是否有重复字符串很好判断,只需要将字符串遍历一遍,检查是否已经有存在过的字符。

/*** @param {string} s* @return {number}*/
var lengthOfLongestSubstring = function (s) {if (typeof s === "string" && s.length >= 1) {const length = s.length;let now = "";for (let i = length; i >= 1; i--) {for (let j = 0; j + i <= length; j++) {now = s.slice(j, j + i);if (isRepeat(now)) {return now.length;}}}} else {return 0;}function isRepeat(str) {const array = [];for (const i of str) {if (array.includes(i)) {return false;} else {array.push(i);}}if (array.length === str.length) {return true;}}
};

最长回文子串

leetCode链接 https://leetcode.cn/problems/longest-palindromic-substring/
解题思路有两种。

  1. 扩散算法
    从i开始,分别尝试i (i + 1)和i(i - 1) 然后是(i - 1)i(i + 1) 以此类推,从中间扩散的方式进行判断是否无重复字符串。
  2. 从最长的开始适配
    先判断整个字符串是否满足,然后是length - 1 的字符串(有两个),然后是(length - 2)的字符串,有三个,以此类推,只要找到了,就退出循环,返回结果。

是否是回文字符串也比较容易判断,只需要将字符串转为数组,再将数组倒序,拼为一个新的字符串,如果新字符串与一开始相等,就是回文字符串。

/*** @param {string} s* @return {string}*/
var longestPalindrome = function (s) {function isPalindrome(str) {return str.split("").reverse().join("") === str;}const length = s.length;if (typeof s === "string" && s.length > 0) {for (let i = length; i >= 1; i--) {for (let j = 0; j <= length - i; j++) {const now = s.substring(j, j + i);console.log(now);if (isPalindrome(now)) {return now;}}}} else {return "";}
};

N形变换

leetCode链接 https://leetcode.cn/problems/zigzag-conversion/

解题思路: N行变换,说白了就是找规律,比如当行数为4行的时候,字符串下标为i的字符分别所在的位置,我们按照这个位置保存到一个二维数组中,然后遍历这个二维数组,将字符串重新组合。

规律如下: 字符串下标 i % 2n - 2 求余, n是要求的行数,如果余数小于n - 1,那余数就是该字符所在的行数,如果余数大于等于 n - 1,那就用2n - 2 - 余数,对应的值就是该字符串所在的行数。

0     6      12        18
1   5 7   11 13    17
2 4   8 10   14 16
3     9      15
/*** @param {string} s* @param {number} numRows* @return {string}*/
var convert = function (s, numRows) {const array = s.split("");if (numRows <= 1) {return s;}const resultArray = [];const num = numRows * 2 - 2;array.forEach((item, index) => {let rows = (index % num) - num / 2;if (rows >= 0) {rows = num - (index % num);} else {rows = index % num;}if (typeof resultArray[rows] === "object") {resultArray[rows].push(item);} else {resultArray[rows] = [item];}});let result = "";for (let i = 0; i < resultArray.length; i++) {result += resultArray[i].join("");}return result;
};

字符串转换整数

leetCode链接 https://leetcode.cn/problems/string-to-integer-atoi/

这个题其实没啥意思,就是要读懂题目要求
空格只能出现在字符串的最面,可以是连续的,否则就终止。
±符号只能出现一次或者零次,并且±符号最多总共只能出现一个,否则就终止。
±符号只可能出现在空格的后面和数字的前面,否则就终止。
除了前面的空格和前面的±符号可能出现外,其余的地方只能出现数字,否则就终止。

如果终止后没有得到一个合理的数字,就返回 0。
如果数字超出了设置的最大最小的范围,就返回范围边界的数字即可。

/*** @param {string} s  https://leetcode.cn/problems/string-to-integer-atoi/submissions/* @return {number}*/
var myAtoi = function (str) {let sign = 1;let i = 0;let result = 0;const max = Math.pow(2, 31) - 1;const min = -Math.pow(2, 31);while (i < str.length) {// 去除最前面的空格if (str[i] === " ") {i++;continue;} else {break;}}if (str[i] === "-") {sign = -1;i++;} else if (str[i] === "+") {i++;}while (i < str.length) {const charCode = str.charCodeAt(i);if (charCode >= 48 && charCode <= 57) {result = result * 10 + Number(str[i]);} else {break;}const nextCharCode = str.charCodeAt(i + 1);if (nextCharCode < 48 || nextCharCode > 57) {break;} else {i++;continue;}}result = sign * result;if (result > max) {return max;} else if (result < min) {return min;} else {return result;}
};

相关文章:

leetCode算法第一天

今天开始刷算法题&#xff0c;提升自己的算法思维和代码能力&#xff0c;加油&#xff01; 文章目录 无重复字符的最长子串最长回文子串N形变换字符串转换整数 无重复字符的最长子串 leetCode链接 https://leetcode.cn/problems/longest-substring-without-repeating-characte…...

怎么将太大的word文档压缩变小,3个高效方法

怎么将太大的word文档压缩变小&#xff1f;word文档是我们在办公中使用较多的文件格式之一&#xff0c;相信小伙伴们会遇到这样的问题&#xff0c;编辑完成word文档之后发现&#xff0c;编辑完的文档体积太大了&#xff0c;无论是发送给客户还是上传到邮箱中都不方便&#xff0…...

mvc+动态代理

不使用MVC的时候系统存在的缺陷 一个Servlet都负责了那些工作&#xff1f; 负责了接收数据负责了核心的业务处理负责了数据表中的CRUD负责了页面的数据展示… 分析银行转账项目存在那些问题&#xff1f; 代码的复用性太差。&#xff08;代码的重用性太差&#xff09; 因为没…...

vue-cli(vue脚手架方式搭建)

1.首先安装node前端环境,可以帮助我们去下载其他的组件 下载完成后,去自己的电脑找到node的文件路径,复制去配置环境变量,在path中配 环境搭配完成后,在cmd中进行测试 ,输入一下两个命令进行测试 2.在hbuilderX中创建一个vue-cli项目(标准的前段项目) 3.组件路由 (1)安装 v…...

CentOS 安装 Docker

文章目录 一、更新yum源二、查看docker是否曾经安装过三、安装所需要的软件包四、设置yum源&#xff08;也可以设置成国内的阿里源等&#xff09;五、查看docker版本六、.安装docker &#xff08;默认全部选y&#xff09;七、查看docker安装版本八、docker 启动/停止/重启/开机…...

别搞了 软件测试真卷不动了...

内卷可以说是 2022年最火的一个词了。2023 年刚开始&#xff0c;在很多网站看到很多 软件测试的 2022 年度总结都是&#xff1a;软件测试 越来越卷了&#xff08;手动狗头&#xff09;&#xff0c;2022 年是被卷的一年。前有几百万毕业生虎视眈眈&#xff0c;后有在职人员带头“…...

OJ刷题 第十二篇

21308 - 特殊的三角形 时间限制 : 1 秒 内存限制 : 128 MB 有这样一种特殊的N阶的三角形&#xff0c;当N等于3和4时&#xff0c;矩阵如下&#xff1a; 请输出当为N时的三角形。 输入 输入有多组数据&#xff0c;每行输入一个正整数N&#xff0c;1<N<100 输出 按照给出…...

【计算机专业应届生先找培训还是先找个工作过渡一下?】

计算机专业应届生先找培训还是先找个工作过渡一下&#xff1f; 计算机应届生是先培训还是先工作&#xff0c;这个问题应该困扰了很多专业技能一般的同学&#xff0c;尤其是学历方面还没有优势的普通本专科院校。都说技术与学历优秀的人进大厂&#xff0c;技术一般学历优秀的人能…...

MySQL数据库,联合查询

目录 1. 联合查询 1.1 内查询 1.2 外查询 1.3 自连接 1.4 子查询 1.5 合并查询 1. 联合查询 联合查询&#xff0c;简单的来讲就是多个表联合起来进行查询。这样的查询在我们实际的开发中会用到很多&#xff0c;因此会用笛卡尔积的概念。 啥是笛卡尔积&#xff1f;两张表…...

springboot注解(全)

一、什么是Spring Boot Spring Boot是一个快速开发框架&#xff0c;快速的将一些常用的第三方依赖整合&#xff08;通过Maven子父亲工程的方式&#xff09;&#xff0c;简化xml配置&#xff0c;全部采用注解形式&#xff0c;内置Http服务器&#xff08;Jetty和Tomcat&#xff0…...

进制转换—包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细

目录 1.进制转换必备知识&#xff1a; 1.1 二进制逢2进1 8进制逢8进1 10进制逢10进1 16进制逢16进1 1.2为了区分二、八、十、十六进制&#xff0c;我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换 2.1 二进制转八进制 2.2 八…...

什么是UML?

文章目录 00 | 基础知识01 | 静态建模类图对象图用例图 02 | 动态建模时序图通信图状态图活动图 03 | 物理建模构件图部署图 UML&#xff08;Unified Model Language&#xff09;&#xff0c;统一建模语言&#xff0c;是一种可以用来表现设计模式的直观的&#xff0c;有效的框图…...

5.3 Mybatis映射文件 - 零基础入门,轻松学会查询的select标签和resultMap标签

本文目录 前言一、创建XML映射文件二、MybatisX插件安装三、mapper标签四、select标签UserMapper接口方法UserMapper.xml 五、resultMap标签定义resultMap标签修改select标签 总结 前言 MyBatis的强大在于它的语句映射&#xff0c;它提供了注解和XML映射文件两种开发方式&…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附获奖论文和python代码实现)

目录 摘 要: 1 问题重述 1.1 问题背景 1.2 问题重述 2 模型假设 3 符号说明...

C6678开发概述与Sys/bios基本使用

C6678开发概述 参考开发环境标记及术语创建sys/bios自定义平台运行第一个sys/bios程序Clock模块使用Demo 参考 TMS320C6678 Multicore Fixed and Floating-Point Digital Signal Processor Datasheet TMS320C66x DSP CorePac User Guide 官方手册 创龙6678开发教程 开发环境 …...

python算法中的图算法之网络流算法(详解二)

目录 学习目标: 学习内容: 网络流算法 Ⅰ. 网络流模型 Ⅱ . Ford-Fulk...

企业电子招投标采购系统之项目说明和开发类型源码

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…...

ERTEC200P-2 PROFINET设备完全开发手册(8-1)

8.1 IRT通讯实验 这里我们使用APP3 IsoApp&#xff0c;修改源代码usrapp_cfg.h的宏为 #define EXAMPL_DEV_CONFIG_VERSION 3 使能App3&#xff0c;对应的主程序为“usriod_main_isoapp.c” 编译后下载运行。打开4.2建立的TIA项目&#xff0c;添加等时模式组织块&#xff0c…...

手撕Twitter推荐算法

Twitter近期开源了其推荐系统源码[1,2,3]&#xff0c;截止现在已经接近36k star。但网上公开的文章都是blog[1]直译&#xff0c;很拗口&#xff0c;因此特地开个系列系统分享下。系列涵盖&#xff1a; Twitter整体推荐系统架构&#xff1a;涵盖图数据挖掘、召回、精排、规则多…...

JAVA多态性测试的基本实验------JAVA入门基础教程

package duotai;public class Person {public void eat(){System.out.println("人吃饭");}public void Pdrink(){System.out.println("人喝水");} }package duotai;public class Man extends Person {public void eat(){System.out.println("男人吃饭…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...