LeetCode.31 下一个排列

题目描述

实现获取下一个排列的算法,算法需要将给定的数组,重新排列成下一个更大的排列(即组合出下一个更大的数字)。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列。

题目思路

我们可以使用如下的思路来解决这个问题:

  • 首先从后往前找到第一个升序排列的相邻元素对([nums[i]<nums[i+1]),其中把相邻元素对中较小的下标记为 i
    • 如果 i 小于等于 0,那么说明这个数组是一个严格降序的数组,那么直接把数组反转并返回即可
  • 接下来从 [i+1, nums.length-1] 范围中,从后往前找到第一个 >= nums[i] 的元素,下标记为 j
  • 交换 ij 下标的元素
  • [i+1, nums.length-1] 范围内的元素反转

实现代码

public void nextPermutation(int[] nums) {int i = nums.length-2;while (i>=0 && nums[i]>=nums[i+1]) {i--;}if (i < 0) {//如果 i 小于等于 0,说明这个数组是一个完全降序的数组//直接反转即可reverse(nums, 0, nums.length-1);return ;}//否则,从 [i+1, nums.length-1] 区间内,从后往前找到第一个比 nums[i] 大的数int j = nums.length-1;while (j>i && nums[j]<=nums[i]) {j--;}//交换两个元素的位置swap(nums, i, j);reverse(nums, i+1, nums.length-1);
}private void reverse(int[] nums, int start, int end) {while (start < end) {swap(nums, start, end);start++;end--;}
}private void swap(int[] nums, int i, int j) {int t = nums[i];nums[i] = nums[j];nums[j] = t;
}

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

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

相关文章

SpringBoot2.5.4发送邮件4种方式

一.准备 在创建SpringBoot项目 二、选择依赖 选择依赖时 发现其选择依赖时有邮件发送与Springboot整合的jar包&#xff0c;我们勾选即可 如果未勾选也不要紧&#xff0c;咱们手动导入 <dependency><groupId>org.projectlombok</groupId><artifactId…

手游传奇刷元宝_传奇手游 平民制霸刀刀爆元宝!

新轩辕神途手游游戏介绍新轩辕神途是一款玩法种类十分丰富多样的神途手游&#xff0c;游戏内拥有放置挂机升级玩法&#xff0c;玩家不用浪费时间工作上学都能自动升级打宝&#xff0c;更有十分庞大的世界地图等你来探索&#xff0c;十分靠谱&#xff0c;更受欢迎&#xff0c;爆…

MySQL 逻辑架构与常用的存储引擎

文章目录概述逻辑架构示意图Server 层功能模块连接器查询缓存分析器优化器执行器存储引擎层InnoDBInnoDB 主要特性InnoDB 引擎下的查询过程MyISAMMyISAM 的主要特性MyISAM 引擎下的查询过程InnoDB 和 MyISAM 的对比概述 MySQL 是我们平时开发中最常用的关系型数据库&#xff0…

java 阿里云接口实现发送短信验证码

1.先去阿里云开通短信服务&#xff1a; 2.添加模板及签名&#xff1a;需要审核&#xff0c;个人账户审核就几分钟就OK 先解释一下模板及签名&#xff1a; 标准参照&#xff1a;https://help.aliyun.com/document_detail/55324.html?spm5176.sms-sign.0.0.765c1cbeNhvWBZ 去…

faiss python安装_faiss入门

Faiss入门篇假定Faiss已经被安装&#xff0c;若未安装可参考小编安装编译篇https://zhuanlan.zhihu.com/p/78689463。本篇小编基于Faiss的官方wiki实例展开&#xff0c;旨在让大家快速入门Faiss。Faiss底层用c实现并为用户提供python接口&#xff0c;本篇我们以python示例Faiss…

MySQL 索引底层数据结构实现

文章目录概述讨论范围查询数据结构查询数据结构种类及其高性能查询原理MySQL 索引的底层数据结构MySQL 索引的需求分析选择 MySQL 索引的底层数据结构B- 树和 B 树的对比MySQL 索引的底层数据结构揭秘概述 MySQL 的索引是存储引擎用于快速找到记录的一种数据结构&#xff0c;是…

Java面试——SpringMVC系列总结

文章目录&#xff1a; 1.什么是Spring MVC&#xff1f; 2.Spring MVC的主要组件有哪些&#xff1f; 3.请描述一下Spring MVC的工作流程&#xff1f; 4.MVC是什么&#xff1f;MVC设计模式的好处有哪些 5.拦截器Interceptor与过滤器Filter有什么区别&#xff1f; 6.Spring …

中蒙俄经济走廊背景_上海外国语大学师生代表团参观访问G60科创走廊俄罗斯院士创新基地...

10月23日&#xff0c;上海外国语大学团委书记、创新创业与实践教育学院执行院长廖文其、俄罗斯东欧中亚学院党总支副书记郝佳、辅导员石朝天及学生代表等一行15人参观访问G60科创走廊俄罗斯院士创新基地(下简称&#xff1a;创新基地)。创新基地主任赵磊、俄罗斯中小企业联合会华…

MySQL 索引类别与索引使用指南

文章目录概述MySQL 索引类型MySQL 索引方法BTREE 方法HASH 方法主键构成的索引结构主键索引的优点主键索引的缺点依赖顺序插入更新代价高索引使用指南索引树回顾索引树排序规则最左前缀法则最左前缀法则的产生依据最左前缀法则延申字段书写顺序不影响最左前缀法则最左前缀法则总…

测试员不可不知的几款bug管理工具

根据每个公司性质的不同&#xff0c;规模的不同&#xff0c;所用到的bug管理工具也可能不同。你们用的bug管理工具是什么呢&#xff1f;下面介绍几款主流的bug管理工具&#xff1a; 1. JIRA&#xff08;付费&#xff09; JIRA的生产者把JIRA定义为Professional Issue Tracker&…

ios 监听一个控制器的属性_ios - kvo观察者示例(监听类的属性变化)

首先创建Person分类#import interface Person : NSObjectproperty (nonatomic, copy) NSString *name;property (nonatomic, assign) float height;end.m中不做任何事情控制器.m中#import "ViewController.h"#import "Person.h"interface ViewController (…

Bugzilla 使用指南

本篇文章主要关注于如何高效合理的使用Bugzilla。 Bugzilla是一个开源的缺陷跟踪系统&#xff0c;它可以管理软件开发过程中缺陷的提交、修复、关闭等整个生命周期。 1. 基本概念 在Bugzilla中&#xff0c;Bug报告状态分为以下几种状态&#xff0c; 待确认的 unconfirmed 新…

MySQL explain 命令

概述 MySQL 的 explain 命令&#xff0c;主要用于查看实际查询过程中的一些执行细节&#xff08;执行计划&#xff09;&#xff0c;也是查看优化器决定如何执行查询的主要方法 explain 使用示例 explain 的使用也很简单&#xff0c;在 select 语句之前增加 explain 关键字再…

r语言从giuthb安装失败_R语言install_github安装包问题

今早在看微信时&#xff0c;看到一篇文章介绍R可视化的数据包 - rCharts。rCharts的可用性还OK&#xff0c;就是安装时遇到很多坑。如果想要玩一下rCharts&#xff0c;希望我说的这些坑可以让你更快的完成安装。首先需要安装devtools的包&#xff0c;devtools包安装时&#xff…

centos6.5安装bugzilla超详细教程

经过自己的摸索&#xff0c;与尝试&#xff0c;成功在centos6.5上&#xff0c;安装bugzilla。并且可以发送邮件。 一、安装软件 首先&#xff0c;需要安装一些软件 yum install mysql-devel -y yum install mysql-server -y yum install httpd -y yum install gcc gcc-…

从numpy里加载_PyTorch强化:01.PyTorch 数据加载和处理

PyTorch提供了许多工具来简化和希望数据加载&#xff0c;使代码更具可读性。1.下载安装包scikit-image&#xff1a;用于图像的IO和变换pandas&#xff1a;用于更容易地进行csv解析from __future__ import print_function, divisionimport osimport torchimport pandas as pd #用…

Redmine使用手册

一、Redmine简介 Redmine是基于ROR框架开发的一套跨平台项目管理系统&#xff0c;是项目管理系统的后起之秀&#xff0c;据说是源于Basecamp的ror版而来&#xff0c;支持多种数据库&#xff0c;除了和DotProject的功能大致相当外&#xff0c;还有不少自己独特的功能&#xff0…

swagger2maven依赖_Maven + SpringMVC项目集成Swagger

Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法&#xff0c;参数和模型紧密集成到服务器端的代码&#xff0c;允许API来始终保持同步。作用&#x…

IDEA2019版最新配置SVN及上传教程-超详细图文详解

IDEA2019版配置SVN图文详解 1. 查看svn仓库 调出svn视图&#xff1a; 连接svn服务器&#xff1a; 连接后效果如下&#xff1a; 补充:如果输入正确的连接地址后出现错误—系统找不到指定的文件 请到设置中检查(File | Settings | Version Control | Subversion)SVC客户端路径…

openocd目录_OpenOCD的调试

Openocd的调试步骤1、前言本文档仅用于学习参考。对本文档作者保留所有权利。联系邮箱&#xff1a;yarakyoungqq.com2、工具本文使用的软、硬件工具如下&#xff1a;目标开发板&#xff1a;ST SPEAr310 EVB 2.0(官网www.st.com)及其交叉编译环境。仿真器&#xff1a;OpenJTAG(官…