代码随想录刷题笔记(DAY 8)

今日总结:最后一道题解决的比较糟糕,后续会补上新解法,今天还是将中心放在了前端。

Day 8

01. 反转字符串(No. 344)

题目链接

代码随想录题解

1.1 题目

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = [“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]

示例 2:

输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]
输出:[“h”,“a”,“n”,“n”,“a”,“H”]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符
1.2 笔记

非常简单的一道题目,而且题目给的就是一个 char 数组,简单的回顾一下反转的写法

char temp = s[left];
s[left] = s[right];
s[right] = temp;

反转的次数为 s.length / 2 向下取整,写出代码

1.3 代码
class Solution {public void reverseString(char[] s) {int n = s.length / 2;int left = 0;int right = s.length - 1;while (n-- > 0) {char temp = s[left];s[left] = s[right];s[right] = temp;left++;right--;}}
}

02. 反转字符串 II(No. 541)

题目链接

代码随想录题解

2.1 题目

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

输入:s = “abcdefg”, k = 2
输出:“bacdfeg”

示例 2:

输入:s = “abcd”, k = 2
输出:“bacd”

提示:

  • 1 <= s.length <= 104
  • s 仅由小写英文组成
  • 1 <= k <= 104
2.2 笔记

这道题比前面那个复杂的多,有很多条件需要考虑,我们先来尝试读懂题意:

我们可以声明两个指针,这两个指针表明一个 [nk, n2k] 的范围,这个范围不断向后移动,每次出现一次这个范围我们就将前 k 个元素反转。

比如第一次反转的是 [0, k] 第二次是 [2k + 1, 3k]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

前面的都很好理解,就是当最后一个 2k 跃出数组的时候(比如上图的 8k),对于这一组的 7k 就要分两种情况了

  • 如果 7k 也在数组外的话,我们就将 6k + 1 到数组结尾的内容全部反转
  • 否则就只反转 [6k + 1, 7k]的部分。

看了上面的步骤,我们需要一个函数,能够将我们指定起点到指定终点的内容执行反转,有了上题的经验,这个应该很容易写出来

    public void reverseCharArrayByIndex(int indexLeft, int indexRight) {// 反转在范围内的下标int length = (indexRight - indexLeft + 1) / 2;while (length-- > 0) {char temp = x[indexLeft];x[indexLeft] = x[indexRight];x[indexRight] = temp;indexLeft++;indexRight--;}}

接下来,就要用两个指针去遍历了,第一个指针right每次移动 2k 的距离,第二个指针指向的是 right - 2k + 1 的位置这个 +1 就是我们上面比如 2k + 1 中要加的这个 1,是为了更新范围的。

循环结束的时间就是当我们发现 right 跃出数组的时候,这时候我们就可以对上面出现的两种情况来分别求解了

2.3 代码
class Solution {char[] x;public String reverseStr(String s, int k) {x = s.toCharArray();int left = 0; // k 处的下标int right = (2 * k - 1); // 2k 处的下标int n = 1;// 记录是第几个 2kwhile (true) {// 表示遍历到终点了if (right >= x.length - 1) {// 最后一次处理放在循环结束后做break;}reverseCharArrayByIndex(left, left + k - 1);n++; // 表明下一次right = n * 2 * k - 1;left = right - 2 * k + 1;            }if (x.length - left > k) {reverseCharArrayByIndex(left, left + k - 1);} else {reverseCharArrayByIndex(left, x.length - 1);}return String.valueOf(x);}public void reverseCharArrayByIndex(int indexLeft, int indexRight) {// 反转在范围内的下标int length = (indexRight - indexLeft + 1) / 2;while (length-- > 0) {char temp = x[indexLeft];x[indexLeft] = x[indexRight];x[indexRight] = temp;indexLeft++;indexRight--;}}
}

03. 反转字符串中的单词

题目链接

代码随想录题解

3.1 题目

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

**注意:**输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:

输入:s = “the sky is blue”
输出:“blue is sky the”

示例 2:

输入:s = " hello world "
输出:“world hello”
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3:

输入:s = “a good example”
输出:“example good a”
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

提示:

  • 1 <= s.length <= 104
  • s 包含英文大小写字母、数字和空格 ' '
  • s至少存在一个 单词
3.2 笔记

这道题目目前只是做出了一个解法,时间复杂度很高,我这里先将这个方法讲述一下,后面学到新方法会补上。

我们先利用 split 函数将字符串按照空格分割,得到一个数组,然后我们会得到一个新的数组,这个数组中可能包含空字符串。

我们对这个新的字符串数组进行反转,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这时可能会有疑惑,这里面不相干的元素不会影响我们反转吗?

我们假想一个数组,在里面随意添加好多不相干的元素,将这个数组反转之后把不相干的元素去掉,结果和直接反转数组效果是一样的。

反转后依次取出元素,如果里面的不是 “” 空字符串我们就将它前面加上空格,再拼接到结果字符串中

为什么是前面呢?

因为可以规避最后一个元素后面多加一个空格的情况,转化为处理第一位多加空格的情况,只需要返回一个 res.substring(1); 即可,而不是要写 res.substring(0, res.length - 1);

3.3 代码
class Solution {public String reverseWords(String s) {String[] words = s.split(" ");int n = words.length / 2;int left = 0;int right = words.length - 1;String res = "";while (n-- > 0) {String temp = words[left];words[left] = words[right];words[right] = temp;left++;right--;}for (int i = 0; i < words.length; i++) {if (words[i] != "") {res += " " + words[i];}            }return res.substring(1);}
}

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

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

相关文章

医院信息系统集成平台—Ensemble集成平台中间件

Ensemble HIE(健康信息交换)是InterSystems公司一个新的产品,它采用了一种全新的解决方案,是一个强大的应用软件整合平台,它包括了为医疗信息交换预先开发好的组件,使用Ensemble可以快速地整合和开发复合应用程序。Ensemble在增强现有软件功能、协调新的商业过程和集中企…

力扣hot100 二叉树的层序遍历 BFS 队列

&#x1f468;‍&#x1f3eb; 题目地址 时间复杂度&#xff1a; O ( n ) O(n) O(n)空间复杂度&#xff1a; O ( n ) O(n) O(n) &#x1f60b; 队列写法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode…

Java 第19章 IO流 课堂练习+本章作业

文章目录 Buffered流拷贝二进制文件创建文件写入文本读取文本文件存读Properties文件 Buffered流拷贝二进制文件 package com.hspedu.chapter19.outputStream;import java.io.*;public class BufferedCopy02 {public static void main(String[] args) {String srcFilePath &q…

【面试高频算法解析】算法练习2 回溯

目录 前言算法解析练习题组合总和全排列II单词搜索 前言 本篇章开放目的是按算法类型学习算法&#xff0c;学习对应算法理论&#xff0c;并通过练习一些经典算法题深入理解这类算法&#xff0c;避免出现刷了很多算法题&#xff0c;还是一知半解的状态 算法解析 回溯&#xff…

Canal+RabbitMQ实现MySQL数据同步至ClickHouse

ClickHouse作为一个被广泛使用OLAP分析引擎&#xff0c;在执行分析查询时的速度优势很好的弥补了MySQL的不足&#xff0c;但是如何将MySQL数据同步到ClickHouse就成了用户面临的第一个问题。本文利用Canal来实现ClickHouse实时同步MySQL数据&#xff0c;使用RabbitMQ来做消息队…

FreeRTOS——计数型信号量知识总结及实战

1计数型信号量概念 1&#xff09;计数型信号量相当于队列长度大于1 的队列&#xff0c;因此计数型信号量能够容纳多个资源 2&#xff09;适用场景&#xff1a; 事件计数&#xff1a; 当每次事件发生后&#xff0c;在事件处理函数中释放计数型信号量&#xff08;计数值1&#x…

【C语言】汉诺塔问题/数据结构经典问题/详细总结讲解

1. 前言 汉诺塔问题是一个经典的递归问题&#xff0c;源于印度的一个古老传说。这个问题的特点是其独特的解决方式&#xff0c;需要将一堆盘子从一个柱子移动到另一个柱子&#xff0c;每次只能移动一个盘子&#xff0c;并且不能将一个较大的盘子放在较小的盘子上面。这个问题的…

在Docker中安装Tomact

目录 前言&#xff1a; 一.安装Tomact 查找指定的tomact版本 下载tomact9.0 查看该镜像是否安装成功 安装成功之后就开始运行镜像了 ps&#xff08;用于列出正在运行的Docker容器&#xff09; ​编辑 测试(虚拟机ip:8080) ​编辑 解决措施 ​编辑 完成以上步骤&…

如何将本文中的表情符号,使用正则表达式pattern,匹配并替换

如下面的文本: xxxxx \uD83E\uDD1F xxxxx 🤟 xxxxx \uD83E\uDD1Fxxxxx 🤟如何替换这些特殊的unicode呢? 我们先学习下常见的正则: 基本的 Unicode 属性分类 \p{L}|\p{Letter} 字母 \p{M}|\p{Mark

LabVIEW在高精度机器人视觉定位系统中的应用

在现代工业自动化中&#xff0c;精确的机器人视觉定位系统对于提高生产效率和产品质量至关重要。LabVIEW软件&#xff0c;以其卓越的图像处理和自动化控制功能&#xff0c;在这一领域发挥着重要作用。本案例将展示LabVIEW如何帮助开发和实现一个高精度的机器人视觉定位系统&…

有什么安全处理方案可以有效防护恶意爬虫

常见的爬虫 有百度爬虫、谷歌爬虫、必应爬虫等搜索引擎类爬虫&#xff0c;此类爬虫经常被企业用于提高站点在搜索引擎内的自然排名&#xff0c;使得站点在各大搜索引擎中的排名能够提高&#xff0c;进一步通过搜索引擎来进行引流为企业增加业务流量。 恶意爬虫与合法、合规的搜…

Web自动化测试框架总结

实施过了web系统的UI自动化&#xff0c;回顾梳理下&#xff0c;想到什么写什么&#xff0c;随时补充。 首先&#xff0c;自动化测试不是手动测试的替代品&#xff0c;是比较好的补充&#xff0c;而且不是占大比重的补充。 70%的测试工作集中在底层接口测试和单元测试&#xff0…

多元统计分析(4):判别分析

4.1 判别分析的目标 主要目的&#xff1a;判别一个个体所属类别 4.2 距离判别 都选用用马氏距离 4.2.1 判别准则 化简的证明&#xff1a; 称为判别函数&#xff0c;为判别系数。 4.2.2 误判概率 【1】当两个正态总体的协方差相同 证明&#xff1a; 当两个正态总体重合的时…

uniapp中组件库丰富的Switch 开关选择器使用方法

目录 #平台差异说明 #基础使用 #加载中 #禁用switch #自定义尺寸 #自定义颜色 #自定义样式 #异步控制 API #Switch Props #Switch Event 选择开关用于在打开和关闭状态之间进行切换。 #平台差异说明 App&#xff08;vue&#xff09;App&#xff08;nvue&#xff0…

学生公寓安全用电管理系统应用案例

摘要&#xff1a;安全用电是学校公寓用电管理的首要任务&#xff0c;这就需要对一些恶性负载进行识别和控制&#xff0c;同时为了减少电工和后期管理人员的成本&#xff0c;引进了安全用电管理系统。本文在在描述了安全用电管理系统的工作原理和利用智能电表可实现的功能后,阐明…

数字信号处理期末复习——基础知识汇总(三)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

基于ssm的小儿肺炎知识管理系统设计与实现+vue论文

小儿肺炎知识管理系统设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。传统的信息管理模式&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以人力为主的管理模式…

单机多进程,每个进程多张卡 mpi nccl 程序设计检验

做了部分注释&#xff0c;比较乱 本示例结构&#xff1a; 1&#xff0c;源代码 #include <stdlib.h> #include <stdio.h> #include "cuda_runtime.h" #include "nccl.h" #include "mpi.h" #include <unistd.h> #include <…

网络安全—模拟IP代理隐藏身份

文章目录 网络拓扑安装使用代理服务器设置隐藏者设置 使用古老的ccproxy实现代理服务器&#xff0c;仅做实验用途&#xff0c;禁止做违法犯罪的事情&#xff0c;后果自负。 网络拓扑 均使用Windows Server 2003系统 Router 外网IP&#xff1a;使用NAT模式 IP DHCP自动分配或者…

【零基础入门TypeScript】TypeScript - 运算符

目录 ​编辑 什么是操作员&#xff1f; 算术运算符 关系运算符 逻辑运算符 按位运算符 赋值运算符 杂项运算符 否定运算符 (-) 字符串运算符&#xff1a;连接运算符 () 条件运算符 (?) 类型运算符 类型运算符 实例化 什么是操作员&#xff1f; 运算符定义将对数…