力扣hot100:31. 下一个排列

news2024/11/20 0:47:01

LeetCode:31. 下一个排列

在这里插入图片描述

字典序的大小排序:

  • 从前往后对比,如果先出现更小字符的,字典序更小,如果有个字符串结束了,则它更小。
  • string s = "112233"和string t = "1122334",s更小

根据字典序排序说法,我们想找到尽可能小的比当前字典序大的字符串,我们就要尽可能的使得字典序大的出现在更右边。

我们考虑极端情况,如"1122334",比它更大一点的将是"1122343",我们会发现,我们只需要将右边较大的一个数与前面较小的一个数交换就能变得更大,不过为了更小我们需要将交换后的后面部分从小到大排序。

  • "14321",从右往前看,最右边的1走到4都是升序,也就是这一段不可能可以交换变得更大,同理,只要从右边开始看,一直是升序的段,就不可能可以交换变得更大,而如果出现非升序,也就是最左边的1,那就必然可以交换了,因为一定有右边存在一个数比这个数大!
  • 当然我们想要最小的更大的数跟最左边的1交换,我们就需要找到2

算法思路:
124 2 98765432

  1. 从右往左,找到一个断层的第一个数(如果没有,那么整个降序就是答案,再给出的例子里是空出来的2
  2. 在这个断层的数右边找一个比它大但在右边最小的数,与其交换。(交换后右边的数还是顺序排列的,这个更大数是右边的3,交换后变为124398765422
  3. 反转右边的数(注意右边的数一定是按顺序排列的,因为我们按1.的方式进行查找的,反转后变为124322456789,这保证了更大,但是是更大中的最小的那一个。)

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)
在这里插入图片描述

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int i = nums.size() - 2;
        for(; i >= 0; -- i){
            if(nums[i] < nums[i + 1]) break;
        }
        if(i < 0){
            reverse(nums.begin(), nums.end());
            return;
        }
        int j = i + 1;
        for(; j < nums.size(); ++ j){
            if(nums[i] >= nums[j]) break;
        }
        swap(nums[i], nums[j - 1]);
        reverse(nums.begin() + i + 1, nums.end());
        return;
    }
};

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

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

相关文章

训练营第四十二天| 583. 两个字符串的删除操作72. 编辑距离647. 回文子串516.最长回文子序列

583. 两个字符串的删除操作 力扣题目链接(opens new window) 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#xff0c;每步可以删除任意一个字符串中的一个字符。 示例&#xff1a; 输入: "sea", "eat"输出: …

71. UE5 RPG 实现敌人召唤技能

在这一篇文章中&#xff0c;我们要实现敌人的召唤师能够召唤自己的仆从进行作战。 要实现这个技能&#xff0c;我们首先创建新的敌人蓝图&#xff0c;用于召唤。接着&#xff0c;我们将实现一个召唤技能基类&#xff0c;在基类中实现在召唤师的周围获取到可以生成的位置点&…

数据结构与算法笔记:基础篇 - 分治算法:谈一谈大规模计算框架MapReduce中的分治思想

概述 MapReduce 是 Google 大数据处理的三姐马车之一&#xff0c;另外两个事 GFS 和 Bigtable。它在倒排索引、PageRank 计算、网页分析等搜索引擎相关的技术中都有大量的应用。 尽管开发一个 MapReduce 看起来很高深。实际上&#xff0c;万变不离其宗&#xff0c;它的本质就…

【nginx】 nginx核心功能

【nginx】 nginx核心功能 1.nginx核心功能 1. 反向代理 2. 负载均衡 3. 动静分离 4. nginx的高可用2. 反向代理 正向代理: 该服务器代理的是客户端&#xff0c;对于服务器来说&#xff0c;不知道真实客户端的ip。比如: 翻墙软件。 访问国外的服务器---使用了翻墙软件----对…

响应式高端网站模板源码图库素材 资源下载平台源码

源码介绍 亲测可用&#xff0c;可用于做娱乐网资源网&#xff0c;功能非常的齐全无任何加密也无任何后门&#xff01;响应式高端网站模板源码图库素材 资源下载平台源码&#xff08;可运营&#xff09; 页面很美观&#xff0c;堪比大型网站的美工&#xff0c;而且页面做的也很…

GRIT论文阅读笔记

一篇试图统一生成任务和编码任务的工作&#xff0c;就是把只能完成生成任务的GPT改成既能生成又能encode。思路其实很简单&#xff0c;就是在输入的时候添加instruction tokens来指引模型做representation还是generation&#xff0c;然后各自算损失。representation任务用的是d…

【操作系统】操作系统实验02-生产者消费者程序改进

1. 说明文档中原有程序实现的功能、实现方法。&#xff08;用语言、程序流程图、为原有程序添加注释等方式均可&#xff09; 1.//const.h 2.//定义宏变量 3.#ifndef CONST_H 4.#define CONST_H 5. 6.#define TRUE 1 7.#define FALSE 0 8.#define ERROR 0 9.#define OVERFLOW -…

据阿谱尔APO Research调研显示,2023年全球水凝胶市场销售额约为14.2亿美元

根据阿谱尔 (APO Research&#xff09;的统计及预测&#xff0c;2023年全球水凝胶市场销售额约为14.2亿美元&#xff0c;预计在2024-2030年预测期内将以超过5.0%的CAGR&#xff08;年复合增长率&#xff09;增长。 水凝胶有多种应用&#xff0c;包括个人护理、制药、农业及其他…

界面组件Kendo UI for Angular 2024 Q2亮点 - 让应用程序界面拥有AI提示

随着最新的2024年第二季度发布&#xff0c;Kendo UI for Angular为应用程序开发设定了标准&#xff0c;包括生成式AI集成、增强的设计系统功能和可访问的数据可视化。新的2024年第二季度版本为应用程序界面提供了人工智能(AI)提示&#xff0c;从设计到代码的生产力增强、可访问…

卷积神经网络(CNN)理解

1、引言&#xff08;卷积概念&#xff09; 在介绍CNN中卷积概念之前&#xff0c;先介绍一个数字图像中“边缘检测edge detection”案例&#xff0c;以加深对卷积的认识。图中为大小8X8的灰度图片&#xff0c;图片中数值表示该像素的灰度值。像素值越大&#xff0c;颜色越亮&…

ByteTrack跟踪理解

1.ByteTrack 核心思路 &#xff08;1&#xff09;区分高置信度检测框与低置信度检测框&#xff0c;不同置信度检测框采取不同处理方式。 &#xff08;2&#xff09;保留低置信度检测框&#xff0c;在后续可能会重新确认为 confirm 状态。而不是像传统 MOT 算法选择删除。 2.…

视频行人搜索 (Person Search in Videos)

文章目录 视频行人搜索 (Person Search in Videos)图像行人搜索存在问题Video PS 定义MTA-PS数据集First person search dataset in videosComplicated ambient conditions and realistic monitoring scenariosPrivacy insensitivity 方法 视频行人搜索 (Person Search in Vide…

Nacos从入门到实战

一、Nacos介绍 1.什么是Nacos 官方&#xff1a;一个更易于构建云原生应用的动态服务发现&#xff08;Nacos Discovery&#xff09;、服务配置&#xff08;Nacos Config&#xff09;和服务管理平台 集 注册中心配置中心服务管理 平台 注册中心&#xff1a;把所有的服务注册进去…

Redis变慢了?

Redis变慢了&#xff1f; 什么是Redis&#xff1f;测定Redis变慢&#xff1f;最大响应延迟平均响应延迟设置Redis慢日志 分析Redis变慢bigkeysbigkey的危害bigkey优化 写在最后 什么是Redis&#xff1f; 作为一个技术人员来说&#xff0c;大家用的最多的可能就是Redis了&#…

BottomSheet 半模态视图

先看效果图: 越来越多的app,使用半模态视图,弹窗从底部弹窗,手动滑动收起。交互流程丝滑,体验流畅。我这一研究才发现,官方出了一个控件叫 UISheetPresentationController,使用起来及其方便,只需要关注业务逻辑就可以,着急的朋友可以直接把demo拿去。BottomSheetDemo…

Java new HashMap 指定容量,代码怎么写? 学习源码小记

之前针对 创建map 指定容量&#xff0c;写过一篇吐槽教学文章&#xff1a;HashMap 使用的时候指定容量&#xff1f;你真的用明白了吗&#xff1f;&#xff08;值得一阅&#xff09;_new hashmap<>(4);-CSDN博客 因为我们经常要通过代码做一些数据的分组&#xff0c;比如查…

第二证券股市资讯:昨夜!全球新“股王”诞生

昨晚&#xff0c;英伟达成全球市值榜首公司。 当地时间6月18日&#xff0c;美股三大指数小幅收高&#xff0c;标普500指数与纳指再创前史新高。标普500指数涨0.25%&#xff0c;道指涨0.15%&#xff0c;纳指涨0.03%。 AI热潮推动英伟达大涨&#xff0c;市值逾越微软、苹果&…

jsp运行提示_jsp.java某行存在错误问题的解决

jsp运行提示XXX_jsp.java某行存在错误问题的解决 在编译运行jsp文件时&#xff0c;出现类似如下提示&#xff1a; 49行发生错误&#xff0c;要注意&#xff1a; 这里所指的49行并非jsp文件的第49行&#xff0c;而是编译后的jsp.java文件的第49行。 因此&#xff1a;解决问题…

国际导师上海面授大规模敏捷LeSS认证2024年8月22-24日开班 | 报名享特大福利

课堂互动练习 学员反馈 • “LeSS课我正经听过的有3次&#xff1b;两次Bas Vodde主讲&#xff0c;一次吕毅老师主讲。第一次应该是2015年&#xff0c;这门课中体现的对组织运作和产品开发底层逻辑的洞见令我折服。后来又陆续听了两次&#xff0c;每次都有更多体会。 我试着从一…

Linux中git无法提交,出现不知道身份时的错误,无法检测到有效的电子邮件地址以关联代码的提交

在输入 git commit -m "日志信息"时&#xff0c;出现下列问题。 这是因为Git无法检测到有效的电子邮件地址以关联代码的提交。 一、设置用户邮箱和用户名 使用以下命令来设置你的用户邮箱和用户名。请确保将youexample.com替换为你的实际邮箱地址&#xff0c;并将Y…