当前位置: 首页 > 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("男人吃饭…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...