leetCode算法第一天

news2024/11/16 1:27:57

在这里插入图片描述

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

文章目录

    • 无重复字符的最长子串
    • 最长回文子串
    • 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;
  }
};

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

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

相关文章

解决使用Auto-GPT本地部署时无法连接Google的问题和无法连接openai的问题

解决使用Auto-GPT本地部署时无法连接Google的问题 引言 在这篇博客文章中&#xff0c;我们将介绍如何解决使用Auto-GPT本地部署时遇到的无法访问Google的问题。文章的目标受众为编程者和AI工作者。 无法访问Google的问题 在使用Auto-GPT时&#xff0c;可能会遇到无法访问Go…

C++ :Lambda函数的浅学习

文章目录 前言一、lambda函数实例总结 前言 lambda表达式又被称之为lambda函数&#xff0c;是c11的新特性&#xff0c;下面我们看一下lambda表达式的参数等说明&#xff1a; [函数对象参数](操作符重载函数参数)mutable或exception声明->返回值类型{ 函数体 } 下面我们…

EFI Driver Model(下)-USB 驱动设计

1、USB简介 通用串行总线&#xff08;英语&#xff1a;Universal Serial Bus&#xff0c;缩写&#xff1a;USB&#xff09;是一种串口总线标准&#xff0c;也是一种输入输出接口的技术规范&#xff0c;被广泛地应用于个人电脑和移动设备等信息通讯产品&#xff0c;并扩展至摄影…

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

先直接看图 这是ffmpeg向流媒体服务器推流时候的堆栈 引入C 11之后 堆栈会显得特别繁复冗余 看起来 也没有 以前没有C11之前那样 简单明了 太复杂了 标记下 很多函数名字被我改了 因为原来的看起来 同名函数太多了 C11 和lambada 匿名函数 让看堆栈 成了地狱模式 断点断在…

线程安全和线程不安全之chatgpt理解

对“线程安全”和“线程不安全”&#xff0c;我之前的常规理解是&#xff1a;线程安全&#xff1a;多线程对同一个数据或者容器进行访问或者处理&#xff0c;不会导致数据出现同步问题。线程不安全&#xff1a;多线程对同一个数据或者容器进行访问或者处理&#xff0c;会出现同…

【深度学习】【部署】Flask快速部署深度学习模型【入门】

【深度学习】【部署】Flask快速部署深度学习模型【入门】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【部署】Flask快速部署深度学习模型【入门】前言搭建简单的Web服务搭建深度学习的Web服务win10下打包成exe(选看)总结 前言…

web后端-请求响应

概述 我们之前在Spring写的 Java类&#xff0c;因为没有继承任何的接口 所以tomcat其实是不识别的&#xff0c;也不能直接运行 但是tomcat识别JavaEE的一项规范-Servlet,因为tomcat就相当于一个Servlet容器 SpringBoot底层提供了一个DisPatcherServlet类(实现了servlet接口)…

C++入门篇(一)

目录 一、C关键字汇总二、命名空间2.1 命名空间的定义2.2 命名空间的使用 三、C的输入和输出四、缺省参数五、函数重载5.1 函数重载的概念5.2 C支持函数重载的原理是什么&#xff1f; 一、C关键字汇总 在C98标准下&#xff0c;C一共有63个关键字&#xff0c;C语言一共有32个关…

第二章 设计模式七大原则

文章目录 前言一、单一职责 &#x1f367;1、单一职责原则注意事项和细节2、代码实现2、1 错误示例2、2 正确示例但有缺陷2、3 最终形态 二、接口隔离原则 &#x1f969;1、代码示例 三、依赖倒转原则 &#x1f965;1、代码示例2、依赖关系传递的三种方式 四、里氏替换原则 &am…

【C 语言】习题 1 - 用代码将二进制转换为十进制

目录 1、缘起 2、算法描述 3、代码清单 4、相关知识点 5、总结 1、缘起 我以前计算二进制转换为十进制的时候&#xff0c;喜欢用笔算&#xff0c;或者电脑在手旁的时候&#xff0c;用电脑自带的程序员计算器进行计算。今天兴起&#xff0c;突然想写一个代码用于计算…

Bootstrap框架实战:轻松搭建响应式网站

Bootstrap 是一款非常受欢迎的前端开发框架&#xff0c;它可以帮助我们轻松地搭建响应式网站。在这篇文章中&#xff0c;我们将介绍如何使用 Bootstrap 框架创建一个简单的响应式网站&#xff0c;并了解其核心概念和组件。 1. Bootstrap 简介 Bootstrap 是由 Twitter 公司的开…

字节码插桩:从分析class文件结构开始

作者&#xff1a;小马快跑 Class字节码 Java 能做到 一次编译&#xff0c;到处运行&#xff0c;主要就是靠 class字节码 文件&#xff0c;也就是 java 文件经过编译之后 .java -> .class&#xff0c;然后再被 JVM 虚拟机加载。其实&#xff0c;不仅是 java 语言&#xff0c…

每日做题总结——day02

目录 字符串处理函数&#xff0c;strcpy&#xff0c;strcat 数组指针 函数缺省值 初始化列表​编辑 友元函数 new与delete 静态成员变量 new与构造函数 delete与析构函数 拷贝构造函数的特点 常成员函数 初始化列表 编程题 字符串中找出连续最长的数字串 数组中超过…

字节的面试,你能扛住几道?

C &#xff0c; Python 哪一个更快&#xff1f; 读者答&#xff1a;这个我不知道从哪方面说&#xff0c;就是 C 的话&#xff0c;它其实能够提供开发者非常多的权限&#xff0c;就是说它能涉及到一些操作系统级别的一些操作&#xff0c;速度应该挺快。然后 Python 实现功能还…

从数据到应用 Web3不再纸上谈兵

继宣布拨款5000万港元加速推动Web3生态圈发展后&#xff0c;香港再次明确对Web3产业创新的支持。近日&#xff0c;香港Web3协会正式成立&#xff0c;创立Web3Hub基金&#xff0c;“东方之珠”正在大力推进第三代互联网的生态建设。 不仅仅是政策红利&#xff0c;ChatGPT等人工…

Web服务器配置(Tomcat)【Centos】

Tomcat 是一个轻量化服务器&#xff0c;理论上支持 20,000 个用户 LNMP&#xff1a;Linux Nginx MySQL LTMP&#xff1a;Linux Tomcat MySQL 1.Apache Tomcat 从版本7开始&#xff0c;若仅仅只需要部署HTML静态页面&#xff0c;Apache就可以完全够用 查看Apache是否安装 rpm -…

Ajax的特性以及用法

一、什么是Ajax 1、jQuery的Ajax ①&#xff1a;get方法​编辑 ②&#xff1a;post方法 ③&#xff1a;Ajax&#xff08;这个重要&#xff0c;jQuery的ajax最常用&#xff09; PS&#xff1a;一定要注意&#xff0c;数据类型是 json &#xff01;&#xff01;&#xff01; …

google breakpad中minidump_stackwalk的编译(Windows)

接上一篇的内容&#xff1a; breakpad编译指南&#xff08;Windows&#xff09;_我的胖是因为太膨胀的博客-CSDN博客 1、获取 googletest 放进 breakpad/src 目录下&#xff0c;并把目录名重命名为testing git clone https://github.com/google/googletest.git 如下图 2、把…

ROS2安装教程(virtualbox7.0.6+ROS2)

整个过程分两步&#xff1a;先安装Virtualbox&#xff0c;再安装ROS2 一、安装virtualbox7.0.6 网址&#xff1a;https://www.virtualbox.org/wiki/Downloads 问题1 安装时报错&#xff1a;缺少python core 、win32api依赖&#xff08;下图网上拷贝的图&#xff0c;版本忽略…

这份完整WhatsApp营销方案请收好!

WhatsApp是什么&#xff1f; WhatsApp是一种跨平台的即时通讯应用程序&#xff0c;可以在手机、平板电脑和电脑上使用。它允许用户发送文字消息、语音消息、图片、视频和文件等内容&#xff0c;同时还可以进行语音通话和视频通话。 WhatsApp拥有多种功能&#xff0c;包括但不…