代码随想录刷题笔记(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;// 记录是第几个 2k
        while (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);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何解决大模型的「幻觉」问题?

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;贝叶斯滤波与Kalman估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能&#xff0c…

【12】ES6:模块化

一、JavaScript 模块化 JavaScript 模块化是一种组织和管理 JavaScript 代码的方法&#xff0c;它将代码分割为独立的模块&#xff0c;每个模块都有自己的作用域&#xff0c;并且可以导出和导入功能。模块化可以提高代码的可维护性、可重用性和可扩展性。 在JavaScript中&…

FCN学习-----第一课

语义分割中的全卷积网络 CVPR IEEE国际计算机视觉与模式识别会议 PAMI IEEE模式分析与机器智能汇刊 需要会的知识点&#xff1a; 神经网络&#xff1a;前向传播和反向传播 卷积神经网络&#xff1a;CNN&#xff0c;卷积&#xff0c;池化&#xff0c;上采样 分类网络&#xff1a…

CCF模拟题 202312-1 仓库规划

问题描述 试题编号&#xff1a; 202312-1 试题名称&#xff1a; 仓库规划 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 输入格式 输出格式 样例输入 4 2 0 0 -1 -1 1 2 0 -1样例输出 3 1 0 3样例解释 Java实现代码&#xff1a; import …

Spring高手之路-Spring Bean、Java Bean和对象的区别与联系

目录 什么是Spring Bean 什么是Java Bean 什么是对象 Spring Bean与Java Bean与对象的联系与区别 联系 区别 什么是Spring Bean 在Spring官方文档中对Bean的解释如下&#xff1a; In Spring, the objects that form the backbone of your application and that are manage…

贪吃蛇C语言实现(有源码)

前言 之前学了一点easyx图形库的使用&#xff0c;掌握一些基本用法后就用贪吃蛇来进行实战了&#xff0c;运行视频放在csdn视频那一栏了&#xff0c;之前的烟花也是。 1.头文件 #define _CRT_SECURE_NO_WARNINGS 1 #include<easyx.h> #include<conio.h> #includ…

odoo17 | 基本视图

前言 我们在上一章中已经看到Odoo能够为给定模型生成默认视图。在实践中&#xff0c;默认视图是绝对不可接受的用于商业应用程序。相反&#xff0c;我们至少应该以逻辑方式组织各种字段。 视图在带有动作和菜单的XML文件中定义。它们是ir.ui.view模型的实例。 在我们的房地产…

YOLO+SlowFast+DeepSORT 简单实现视频行为识别

前段时间刷短视频看到过别人用摄像头自动化监控员工上班状态&#xff0c;比如标注员工是不是离开了工位&#xff0c;在位置上是不是摸鱼。虽然是段子&#xff0c;但是这个是可以用识别技术实现一下&#xff0c;于是我在网上找&#xff0c;知道发现了 SlowFast&#xff0c;那么下…

Sharding-JDBC快速使用【笔记】

1 引言 最近在使用Sharding-JDBC实现项目中数据分片、读写分离需求&#xff0c;参考官方文档&#xff08;Sharding官方文档&#xff09;感觉内容庞杂不够有条理&#xff0c;重复内容比较多&#xff1b;现结合项目应用整理笔记如下供大家参考和自己回忆使用&#xff1b; 在…

苹果手机数据删除怎么恢复?这几个方法值得一试!

不小心删除了iPhone里的照片&#xff1f;别担心&#xff0c;数据恢复是有可能的&#xff01; 从这里&#xff0c;你可以找到你的备份并恢复丢失的数据。如果你没有备份&#xff0c;那么数据恢复软件可能可以帮助你。它们可以扫描你的iPhone或iTunes备份&#xff0c;找到你删除…

打字练习(Python代码模拟打字练习软件效果)

Python代码模拟打字练习软件效果&#xff0c;循环进行单行打字练习&#xff0c;结束时输出平均速度和综合正确率。 (笔记模板由python脚本于2024年01月03日 22:36:34创建&#xff0c;本篇笔记适合熟悉Python字符串和列表基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 P…

如何利用Oracle官方网站不登录账号下载和安装非最新版本的JDK(版本自由选择)

一、JDK概述 JDK&#xff08;Java Development Kit&#xff09;是Java开发工具集&#xff0c;是针对Java编程语言的软件开发环境。它包含了Java编译器、JRE&#xff08;Java运行时环境&#xff09;以及其他一些用于开发、调试和测试Java应用程序的工具&#xff0c;是Java开发人…

通用Mapper怎么开接口扫描

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

三维模型数据的几何坐标变换的点云重建并行计算技术方法分析

三维模型数据的几何坐标变换的点云重建并行计算技术方法分析 倾斜摄影三维模型数据的几何坐标变换与点云重建并行计算技术的探讨主要涉及以下几个方面&#xff1a; 1、坐标系定义与转换&#xff1a;在进行坐标变换前&#xff0c;需要确定各个参考系的定义并实现坐标系之间的转…

[Angular] 笔记 15:模板驱动表单 - 表单验证

油管视频&#xff1a; Form Validation 有三种类型的验证&#xff1a; valid, pristine(是否被编辑过&#xff0c;被改过)&#xff0c;以及 touched 相反的属性&#xff1a; invalid, dirty, untouched pokemon-template-form.component.html 代码修改&#xff1a; 任何时候…

geemap学习笔记040:GEE中样本点选择操作流程

前言 geemap中目前有一个bug&#xff0c;就是在选择样本点的时候不合理&#xff0c;选完一类样本之后&#xff0c;没法继续选择下一类&#xff0c;并且没法在线进行编辑和修改。因此目前就只能结合在线版的GEE进行样本选择&#xff0c;本节就详细的介绍一下GEE中样本点的选择过…

Transformer 架构解释

一、说明 变形金刚是机器学习的一个新发展&#xff0c;最近引起了很大的轰动。他们非常善于跟踪上下文&#xff0c;这就是为什么他们写的文本有意义。在本章中&#xff0c;我们将介绍它们的体系结构以及它们的工作原理。 amanatulla1606 Transformer 模型是机器学习中最令人兴奋…

机器学习期末复习

机器学习 选择题名词解释&#xff1a;简答题计算题一、线性回归二、决策树三、贝叶斯 选择题 机器学习利用经验 &#xff0c;须对以下&#xff08;&#xff09;进行分析 A 天气 B 数据 C 生活 D 语言 归纳偏好值指机器学习算法在学习的过程中&#xff0c;对以下&#xff08;&a…

酷开系统小酷少儿重磅升级!陪伴孩子美好童年!

孩子的成长总是匆匆太匆匆&#xff0c;父母们应该放慢脚步&#xff0c;感悟童心。用心灵和智慧陪伴孩子&#xff0c;在孩子的心中没有什么比幸福的家庭更重要&#xff0c;没有什么比父母的陪伴更美好&#xff01;酷开系统少儿频道全面升级&#xff01;让酷开系统小酷少儿陪伴成…

设计模式篇章(1)——理论基础

设计模式&#xff1a;在软件开发中会面临许多不断重复发生的问题&#xff0c;这些问题可能是代码冗余、反复修改旧代码、重写以前的代码、在旧代码上不断堆新的代码&#xff08;俗称屎山&#xff09;等难以扩展、不好维护的问题。因此1990年有四位大佬&#xff08;GoF组合&…