【算法】反转字符串中的单词、奇数在偶数后

news2024/11/27 21:04:15

目录

奇数在偶数后

解法一:双指针

复杂度

解法二:插入排序思想

复杂度

反转字符串中的单词

解法一:栈

复杂度

解法二:双指针

复杂度


奇数在偶数后

题目描述:

输入一个整数数组,实现一个接口来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。

解法一:双指针

#include <vector>
#include <algorithm> //std::swap
using namespace std;
class Solution
{
    public:
    //双指针
    void Func(vector<int>& v)
    {
        int left = 0,right=v.size();
        while(left<right)
        {
            while((left<right)&&(v[left] & 1))
            {
                left++;
            }
            while((left<right)&& !(v[right] & 1))
            {
                right--;
            }
            swap(v[left],v[right]);
        }
    }

复杂度

时间复杂度:O(n)

空间复杂度:O(1)

进阶:如果要求奇数与奇数、偶数与偶数之间的相对位置不变,该如何实现接口?

解法二:插入排序思想

void sort(vector<int>& v)
{
    int size = v.size();
    int k = 0;
    for (int i = 0;i < size;++k)
    {
        if ((v[i] & 1) == 1) //判断是否为奇数
        {
            int j = i;
            int tmp = v[i];
            while (k < j)
            {
                v[j] = v[j - 1];
                --j;
            }
            v[k++] = tmp;
        }
    }
}

复杂度

时间复杂度:O(n)

空间复杂度:O(1)

反转字符串中的单词

题目描述:

解法一:栈

遍历字符串,然后注意处理空格,将单词push到栈中,然后出栈即可。

class Solution {
public:
    string reverseWords(string s) {
        int size = s.size();
        string res;
        stack<string> mystack;
        for(int i = 0;i<size;++i)
        {
            if(' ' == s[i])
            {
                if(!res.empty())
                {
                    mystack.push(res);
                    res.clear();
                }
            }
            else
            res.push_back(s[i]);
        }
        while(!mystack.empty())
        {
            if(!res.empty())
            res += ' ';
            res += mystack.top();
            mystack.pop();
        }
        //处理res中最后一个' '  //这种写法很挫,因此上面对该代码做了优化,如果res不为空就给添加' '
        // size = res.size();
        // res.erase(size-1);
        return res;
    }
};

复杂度

时间复杂度:O(n)

空间复杂度:O(n)

解法二:双指针

思路图示:

string reverseWords(string s) {
        //首先反转给定字符串s
        std::reverse(s.begin(),s.end());
        int size = s.size();
        int index = 0;
        for(int i = 0;i < size;++i)
        {
            if(s[i] != ' ')
            {
                if(index != 0)
                s[index++] = ' ';
                int start = i;
                while(start < size && s[start] != ' ')
                {
                    s[index++] = s[start++];
                }
                //对每个单词进行反转
                std::reverse(s.begin()+index-(start-i), s.begin()+index);
                i = start;
            }
        }
        s.erase(index); //s.erase(s.begin()+index,s.end());删除后面的空格
        return s;
        //index相当于一个慢指针
        //start相当于一个临时快指针

复杂度

时间复杂度:O(n)

空间复杂度:O(1)

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

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

相关文章

江协科技STM32学习- P21 ADC模数转换器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

GPT避坑指南:如何辨别逆向、AZ、OpenAI官转

市面上有些说自己是官转&#xff0c;一刀只需要1块甚至几毛钱&#xff0c;并声称官方倍率的&#xff0c;很大可能就是使用的是 逆向或Azure。 如何鉴别逆向 逆向的种类很多&#xff0c;主要分为3类 逆向不知名A| 镜像站或偷的 key。成本约等于0&#xff0c;调用聊天数据可能在…

Rust 力扣 - 48. 旋转图像

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 我们可以将原矩阵进行水平翻转&#xff0c;然后在沿主对角线进行翻转&#xff0c;就能完成原矩阵沿顺时针方向旋转90o的变换 题解代码 impl Solution {pub fn rotate(matrix: &mut Vec<Vec<i32>&…

Depcheck——专门用于检测 JavaScript 和 Node.js 项目中未使用依赖项的工具

文章目录 Depcheck 是什麽核心功能&#x1f4da;检测未使用的依赖&#x1f41b;检测缺失的依赖✨支持多种文件类型&#x1f30d;可扩展性 安装与使用1. 安装 Depcheck2. 使用 Depcheck Depcheck 的应用总结项目源码&#xff1a; Depcheck 是什麽 来看一个常见错误场景&#x1…

微信小程序时间弹窗——年月日时分

需求 1、默认当前时间2、选择时间弹窗限制最大值、最小值3、每次弹起更新最大值为当前时间&#xff0c;默认值为上次选中时间4、 minDate: new Date(2023, 10, 1).getTime(),也可以传入时间字符串new Date(2023-10-1 12:22).getTime() html <view class"flex bb ptb…

ffmpeg视频滤镜:膨胀操作-dilation

滤镜介绍 dilation 官网链接 > FFmpeg Filters Documentation 膨胀滤镜会使图片变的更亮&#xff0c;会让细节别的更明显。膨胀也是形态学中的一种操作&#xff0c;在opencv中也有响应的算子。此外膨胀结合此前腐蚀操作&#xff0c;可以构成开闭操作。 开操作是先腐蚀…

【Spring框架】Spring框架的开发方式

目录 Spring框架开发方式前言具体案例导入依赖创建数据库表结构创建实体类编写持久层接口和实现类编写业务层接口和实现类配置文件的编写 IoC注解开发注解开发入门&#xff08;半注解&#xff09;IoC常用注解Spring纯注解方式开发 Spring整合JUnit测试 Spring框架开发方式 前言…

Mac开发环境配置- Shell/Homebrew/ruby

前言 从 macOS Catalina 开始&#xff0c;Mac 使用 zsh 作为默认登录 Shell 和交互式 Shell。当然你也可以修改默认Shell&#xff0c;但一般没这个必要。而实际开发中经常会遇到一些环境问题导致的报错&#xff0c;下面我们就讲一下一些常用库的环境配置以及原理。 一、Homeb…

苹果转向 Apple Silicon,Intel Mac 的支持时限倒计时

苹果已完成将 Mac 过渡至自家研发的 Apple Silicon 芯片&#xff0c;在过渡期间&#xff0c;苹果迅速停止对 Intel Mac 的新版本 macOS 的支持。 苹果通常为大多数设备提供约 5 年的软件更新。仍在使用 Intel 芯片的 Mac 机型包括&#xff1a; 2019 年款 Mac Pro2018 年款 Ma…

C++ TensorRT yolov8推理 CUDA核函数加速前处理

目录 效果 4K视频 CPU前处理效果 4K视频 CUDA核函数前处理效果 2K视频 CUDA核函数前处理效果 1080P 视频 CUDA核函数前处理效果 模型 电脑环境 项目 代码 下载 效果 C TensorRT yolov8推理 CUDA核函数加速前处理 4K视频 CPU前处理效果 4K视频 CUDA核函数前处理效果 …

自动化测试覆盖率提升的关键步骤

自动化测试覆盖不足的问题可以通过增加测试用例的数量和质量、引入代码覆盖率分析工具、加强团队的测试意识和技能、优化测试框架和工具、自动化测试与手动测试相结合等方式来解决。其中&#xff0c;引入代码覆盖率分析工具是关键&#xff0c;它可以帮助我们精准地识别未被测试…

STM32-Cube定时器TIM

一、内部时钟源 1、创建项目 File → New → STM32 project选择STM32F103C8T6单片机&#xff0c;命名TIM 2、配置单片机 1.打开USART1&#xff0c;方便我们与电脑连接查看数据 开启UART1并开启中断。 2、设置时钟源 开启外部高速晶振 将时钟频率设置为72MHz 设置调试模…

TCP全连接队列与 tcpdump 抓包

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;计算机网络高效通关之路 欢迎大家点赞收藏评论&#x1f60a; 目录 listen第二个参数详解 全连接队列与半连接队列半开放连接队列&#xff08;SYN队列&#xff09;全连接队列&#xff08;接受队列…

构建灵活、高效的HTTP/1.1应用:探索h11库

文章目录 构建灵活、高效的HTTP/1.1应用&#xff1a;探索h11库背景这个库是什么&#xff1f;如何安装这个库&#xff1f;库函数使用方法使用场景常见的Bug及解决方案总结 构建灵活、高效的HTTP/1.1应用&#xff1a;探索h11库 背景 在现代网络应用中&#xff0c;HTTP协议是基础…

Linux 安装MySQL(Cenots版本)

在Linux下安装mysql有很多方法&#xff0c;比如说&#xff1a; 压缩包解压&#xff08;一般为tar.gz&#xff09; 编译好的安装包&#xff08;RPM、DPKG等&#xff09; 在线安装&#xff08;YUM、APT等&#xff09; 在centos环境中&#xff0c;我们一般都用yum源安装。 一 删除…

2. Flink快速上手

文章目录 1. 环境准备1.1 系统环境1.2 安装配置Java 8和Scala 2.121.3 使用集成开发环境IntelliJ IDEA1.4 安装插件2. 创建项目2.1 创建工程2.1.1 创建Maven项目2.1.2 设置项目基本信息2.1.3 生成项目基本框架2.2 添加项目依赖2.2.1 添加Flink相关依赖2.2.2 刷新项目依赖3. 编写…

Docker使用-在Maven里面配置阿里云容器镜像仓库

准备环境 1.安装Dockerdesktop 参考文章&#xff1a;Docker Desktop安装 2.Windows 环境 3.IdeaMaven 4.阿里云容器镜像仓库.阿里云容器镜像仓库 5.SpringBoot 例子 通过网盘分享的文件&#xff1a;springboot-docker-demo.zip 链接: https://pan.baidu.com/s/1MD0uI1HG9SjYv…

群控系统服务端开发模式-应用开发-业务架构逻辑开发Redis封装

Redis是现代互联网开发世界不可缺少的一部分&#xff0c;比如登录token过期时间、系统配置等场所必用。 一、安装Redis扩展 composer require predis/predis 二、设置Redis参数 在根目录下config文件夹中找到cache.php文件&#xff0c;然后在stores数组下追加redis配置&#…

【机器学习】揭秘XGboost:高效梯度提升算法的实践与应用

目录 &#x1f354; XGBoost 原理 1.1 目标函数确定和树的复杂度介绍 1.2 XGBoost目标函数的推导 1.3 泰勒公式展开 1.4 化简目标函数 1.5 问题再次转换 1.6 对叶子结点求导 1.7 XGBoost的回归树构建方法 &#x1f354; XGBoost API 2.1 通用参数 2.2 Booster 参数 …

太速科技-430-基于RFSOC的8路5G ADC和8路10G的DAC PCIe卡

430-基于RFSOC的8路5G ADC和8路10G的DAC PCIe卡 一、板卡概述 板卡使用Xilinx的第三代RFSOC系列&#xff0c;单颗芯片包含8路ADC和DAC&#xff0c;64-bit Cortex A53系列4核CPU&#xff0c;Cortex-R5F实时处理核&#xff0c;以及大容量FPGA。 对主机接口采用PCIe Gen3x…