计算机低能儿从0刷leetcode | 31.下一个排列

题目:31. 下一个排列

思路:

本题中,我们需要寻找“下一个排列”,也就是要找到增长最小的排列。

因此我们应该从尽可能从靠右侧(末尾)的位置开始增长。想象我们从末尾开始遍历数组,会遇到第一个波峰,也就是nums[i] > nums[i-1](如果找不到,说明没有下一个排列,那么就把整个序列升序排列即可),而其右边的序列如果存在,一定是降序,否则当前就不是第一个波峰了;所以我们想要让原序列增大,在nums[i]右边为降序的情况下,我们只能去增大nums[i-1],而我们又要最小程度地增大,因此我们就选择[i,len-1]下标范围里大于nums[i-1]中最小的那个数与nums[i-1]交换,而因为[i,len-1]为降序,因此我们从数组末尾查找,找到第一个大于nums[i-1]的值,就是需要交换的值;交换之后,因为i-1位置的数值已经比原来大了,所以一定满足大于原序列的条件,而为了满足是下一个排列,我们还需要把[i,len-1]位置的元素升序排列,至此就找到了“下一个排列”。

因此主要过程分为三部分:

1、从末尾寻找第一个nums[i] > nums[i-1]的位置,找不到就把整个数组升序排列并return。

2、从末尾寻找第一个大于nums[i-1]的值,和nums[i-1]交换。

3、将[i,len-1]位置升序排列。

代码:

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

要点:

之前很少使用sort函数,sort(nums[i], nums[j])的方法是错误的,而应该写作sort(nums.begin()+i,nums.end())。

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

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

相关文章

.net core NPOI以及NOPI mapper

我们在日常开发中对Excel的操作可能会比较频繁&#xff0c;好多功能都会涉及到Excel的操作。在.Net Core中大家可能使用Npoi比较多&#xff0c;这款软件功能也十分强大&#xff0c;而且接近原始编程。但是直接使用Npoi大部分时候我们可能都会自己封装一下&#xff0c;毕竟根据二…

Yolo V4详解

Yolo V4&#xff08;You Only Look Once version 4&#xff09;是一种先进的目标检测系统&#xff0c;于2020年推出。作为Yolo系列算法的最新版本&#xff0c;Yolo V4继承了其前代版本的优点&#xff0c;并在此基础上进行了多项改进&#xff0c;使得其性能得到了显著提升。本文…

Pandas数据结构之Series对象

文章目录 1. DataFrame对象1.1 创建DataFrame对象1.2 DataFrame对象常用属性和方法1.3 布尔值列表获取DataFrame对象中部分数据1.4 DataFrame对象的运算 1. DataFrame对象 DataFrame是一个表格型的结构化数据结构&#xff0c;它含有一组或多组有序的列&#xff08;Series&…

Tomcat 11 下载/安装 与基本使用

为什么要使用Tomcat&#xff1f; 使用Apache Tomcat的原因有很多&#xff0c;以下是一些主要的优点和特点&#xff1a; 1. 开源与免费 Tomcat是一个完全开源的项目&#xff0c;任何人都可以免费使用。它由Apache软件基金会维护&#xff0c;拥有一个活跃的社区&#xff0c;这…

换热器换热面积计算

1 容积式水加热器换热面积计算 式中Q—设计小时耗热量&#xff08;W&#xff09; ε—由于水垢、热媒分布不均匀等影响传热效率的系数&#xff0c;一般采用0.8~0.6 K—传热系数[W/(m2ˑ℃)]&#xff0c;K值对加热器换热影响很大&#xff0c;主要取决于热媒种类和压力、热媒和…

幸福宝宝起名器

这段代码是一个简单的“幸福宝宝取名器”网页应用&#xff0c;主要功能是根据用户输入的姓氏、性别和生成数量&#xff0c;随机生成宝宝的名字。以下是代码的主要组成部分和功能简介&#xff1a; 1. HTML 结构 - 文档类型和语言&#xff1a;使用 <!DOCTYPE html> 声明文…

【数据结构与算法】LeetCode: 贪心算法

文章目录 LeetCode&#xff1a; 贪心算法买卖股票的最佳时机 &#xff08;Hot100&#xff09;买卖股票的最佳时机 II跳跃游戏 &#xff08;Hot100&#xff09;跳跃游戏 II&#xff08;Hot100&#xff09;划分字母区间 &#xff08;Hot100&#xff09;分发饼干K次取反后最大化的…

BLG与T1谁会赢?python制作预测程序,结果显示,BLG将打败T1

决赛预测 2024英雄联盟全球总决赛 2024年英雄联盟全球总决赛&#xff0c;今天晚上&#xff08;2024年11月2日22点&#xff09;就要开始了&#xff01;今年的总决赛的队伍是BLG与T1。当然一些老的lol玩家&#xff0c;现在可能对于lol关注不多&#xff0c;并不清楚这两个队伍。…

Spring Boot 3.x 整合 Druid 数据库连接池(含密码加密)

Spring Boot 3.x 整合 Druid 数据库连接池&#xff08;含密码加密&#xff09; 1. 为什么需要数据库连接池&#xff1f; 在传统的数据库连接中&#xff0c;每一次与数据库连接都会消耗大量的系统资源和时间。数据库连接池会提前创建一定数量的数据库连接保存在池中&#xff0…

麒麟V10SP1部署postgresql+postgis+pgrouting

1、查看当前操作系统版本&#xff1a; nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Tercel) Kernel: 4.19.90-17.5.ky10.aarch64 Build: Kylin Linux Advanced Server release V10 (SP1) /(Tercel)-…

Spring Boot框架在信息学科平台建设中的实用技巧

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于保密信息学科平台系统的开发全过程。通过分析基于保密信息学科平台系统管理的不足&#xff0c;创建了一个计算机管理基于保密信息学科平台系统的方案。文章介…

完美解决“找不到MSVCR110.dll无法继续执行代码

msvcr110.dll是一个动态链接库&#xff08;Dynamic Link Library&#xff0c;简称DLL&#xff09;文件&#xff0c;它是Microsoft Visual C 2012 Redistributable Package的一部分。这个库文件包含了大量预先编写的函数和资源&#xff0c;用于支持那些使用Visual C 2012或与之兼…

C++【string的模拟实现】

在前文我们讲解了string类接口使用&#xff08;C【string类的使用】(上),C【string类的使用】&#xff08;下&#xff09;&#xff09;&#xff0c;本片文章就来模拟实现string类。 注&#xff1a;本文实现的是string的部分重点内容&#xff0c;目的是为了更好的了解string&…

JS中计算时数据有误差解决方案

首先判断需要计算的数字是否为整数 // 判断一个数字是否为一个整数 export function isInt(num) {num Number(num);return Math.floor(num) num } 将一个浮点数转为整数&#xff0c;返回整数和倍数。如3.14 返回314 100 export function toInt(num) {var ret { times: 1,…

新能源汽车充电设施在储充电站的应用

0引言 全球能源和环境问题促使新能源汽车受到关注&#xff0c;但其推广受充电设施和能源供应限制。光伏站、储能站和电动汽车充放电站作为可再生能源利用和储存方式&#xff0c;具有巨大潜力。本研究旨在探索新能源汽车充电设施与这些站点的融合模式&#xff0c;以支持新能源汽…

【RESTful】RESTful API的设计原则

目录 引言一、协议二、域名三、版本&#xff08;Versioning&#xff09;四、路径&#xff08;Endpoint&#xff09;4.1 每个资源应有唯一的URI标识4.2 资源路径设计 五、HTTP动词5.1 常用HTTP动词及其作用5.2 RESTful API利用HTTP方法表示对商品资源的操作 六、使用自描述消息6…

Oracle 第11章:异常处理

在 Oracle PL/SQL 中&#xff0c;异常处理是一个重要的概念&#xff0c;它用于管理程序执行过程中可能发生的错误或特殊情况。异常可以是系统预定义的&#xff0c;也可以是由用户自定义的。 异常类型与处理机制 PL/SQL 提供了两种类型的异常&#xff1a; 预定义异常&#xf…

uniapp开发小程序【简单的实现点击下拉选择性别功能】

一、展示效果 二、代码 <template><view><view class="form_box"><view class="item"

Git 基础详解

1. 基本概念 Git是一个免费、开源的 分布式版本控制系统&#xff0c;可以高效处理小到大型的各种项目。 1.1 版本控制 版本控制&#xff1a;它是一种用于追踪和记录文件、目录、项目或软件的变化&#xff0c;以便将来查阅、比较、修订不同版本文件的系统 版本控制系统&…

Yarn介绍 | 组成 | 工作流程

1、理论 Apache YARN&#xff08;Yet another Resource Negotiator的缩写&#xff09;是Hadoop集群的资源管理系统&#xff0c;负责为计算程序提供服务器计算资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MapReduce等计算程序则相当于运行于操作系统之上的应用…