当前位置: 首页 > news >正文

【Hot100】LeetCode—31. 下一个排列

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐31. 下一个排列——题解思路
  • 3- ACM 实现


题目

  • 原题连接:31. 下一个排列

1- 思路

技巧题,分为以下几个步骤

  • ① 寻找拐点: i + 1 :出现 nums[i+1] > nums[i] ,则 i + 1 就是拐点 从右向左遍历
    • 如果没有拐点,直接利用 L 指针和 R 指针,reverse 整个数组
  • ② 寻找交换点:利用 j 寻找在 [i+1,len] 的区间内,第一个大于 nums[i] 的元素,定位为 j
  • ③ 交换元素 i 和 j:直接利用 swap 交换
  • ④ reverse区间 [i+1,len]:利用 L 和 R 双指针进行 reverse

2- 实现

⭐31. 下一个排列——题解思路

在这里插入图片描述

class Solution {public void nextPermutation(int[] nums) {//1. 找拐点int i,j;int len = nums.length-1;for(i = len-1;i>=0;i--){if(nums[i] < nums[i+1]) break;}// 2.不存在直接 reverseif(i==-1){int L = 0;int R = len;while(L<=R){swap(nums,L++,R--);}return ;}// 3.找交换点 jfor(j = len;j>=i+1;j--){if(nums[i]<nums[j]) break;}swap(nums,i,j);// 4.revers[i+1,len]int L = i+1;int R = len;while(L<=R){swap(nums,L++,R--);}}public void swap(int[] nums,int i,int j){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
}

3- ACM 实现

public class nextPermutation {public static void nextPart(int[] nums){//1. 找拐点int i,j;int len = nums.length-1;for(i = len-1;i>=0;i--){if(nums[i+1]>nums[i])break;}// 1.1 找不到直reverseif(i==-1){int L = 0;int R = len;while(L<=R){swap(nums,L++,R--);}return;}// 2.找交换点for(j = len;j>=i+1;j--){if(nums[j]>nums[i]) break;}swap(nums,i,j);// 3.reverse[i+1,len]int L = i+1;int R = len;while(L<=R){swap(nums,L++,R--);}}private static void swap(int[] nums,int i,int j){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入数组长度");int n = sc.nextInt();int[] nums = new int[n];for(int i = 0 ; i < n ; i++){nums[i] = sc.nextInt();}nextPart(nums);System.out.println("结果是");for(int i = 0 ;i < n;i++){System.out.print(nums[i]+" ");}}
}

相关文章:

【Hot100】LeetCode—31. 下一个排列

目录 题目1- 思路2- 实现⭐31. 下一个排列——题解思路 3- ACM 实现 题目 原题连接&#xff1a;31. 下一个排列 1- 思路 技巧题&#xff0c;分为以下几个步骤 ① 寻找拐点&#xff1a; i 1 &#xff1a;出现 nums[i1] > nums[i] &#xff0c;则 i 1 就是拐点 从右向左遍…...

找到学习的引擎,更让你进入心流状态的高效学习

一、心流状态的启动秘籍 1. 简单开始&#xff1a;找到学习的入口 从简单的任务开始&#xff0c;比如整理学习空间或列出学习计划&#xff0c;让大脑逐渐适应学习的节奏。 2. 环境塑造&#xff1a;打造专注的学习空间 清理桌面&#xff0c;减少干扰&#xff0c;比如将手机置…...

QItemDelegate QItemDelegate QItemDelegate

qtreeview点击某一行有颜色显示 c 在Qt中&#xff0c;要实现QTreeView点击某行有颜色显示&#xff0c;可以通过设置QTreeView的itemDelegate来自定义显示样式。以下是一个简单的例子&#xff0c;演示如何为QTreeView的项设置点击时的背景颜色。 #include <QApplication>…...

MySQL数据库 外键默认约束和action 基础知识【2】推荐

数据库就是储存和管理数据的仓库&#xff0c;对数据进行增删改查操作&#xff0c;其本质是一个软件。MySQL就是一种开源的关系型数库&#xff0c;也是最受欢迎的数据库之一&#xff0c;今天对MySQL数据的基础知识做了整理&#xff0c;方便自己查看&#xff0c;也欢迎正在学习My…...

JS正则表达式学习与实践

JS正则表达式学习笔记 1 学习笔记1.1 字符类1.2 量词和分支1.3 标志1.4 锚点1.5 断言 2 常用正则2.1 检查微信浏览器2.2 检查移动端浏览器2.3 检查中文字符2.4 手机号严格2.5 手机号比较宽松2.6 手机号宽松2.7 邮箱验证2.8 金额格式2.9 身份证号2.10 至少8为有数字、大小写字符…...

Java数据结构(五)——栈和队列

文章目录 栈和队列栈基本概念栈的模拟实现集合框架中的栈栈的创建栈的方法栈的遍历 栈的应用及相关练习括号匹配逆波兰表达式求值出栈入栈次序匹配最小栈 几个含"栈"概念的区分 队列基本概念队列的模拟实现循环队列双端队列集合框架中的队列队列的创建队列的方法队列…...

工具使用:nrm使用以及n模块

nrm nrm 是一个npm&#xff08;Node Package Manager&#xff09;的源管理器&#xff0c;它允许用户轻松地在不同的npm源之间进行切换。在Node.js的生态系统中&#xff0c;nrm 提供了一种方便的方式来管理registry源&#xff0c;这对于那些需要从不同的npm源下载或发布包的开发…...

匿名管道+进程池+命名管道

mkfifo name_pipe 创建管道文件。 命名管道&#xff1a; 路径文件名具有唯一性。 匿名管道&#xff1a; 进程池代码&#xff1a; #include<iostream> #include<unistd.h> #include<cstdlib> #include<cassert> #include<vector> #include&…...

【深度学习】【语音TTS】OpenVoice: Versatile Instant Voice Cloning,论文

https://github.com/myshell-ai/OpenVoice https://arxiv.org/abs/2312.01479 文章目录 摘要1 引言2 方法2.1 直观思路2.2 模型结构2.3 训练细节3 结果4 结论摘要 我们介绍了OpenVoice,一种多功能的即时语音克隆方法,只需参考说话者的短音频片段即可复制其声音,并生成多语…...

一六零、云服务器开发机配置zsh

切换shell 在Linux中默认使用/bin/bash&#xff0c;在用户创建时&#xff0c;会自动给用户创建用户默认的shell。默认的shell就是/bin/bash。要修改shell将其设置为/bin/ksh&#xff0c;有两种方法方法 # 方法一: chsh -s /bin/ksh chsh -s /bin/zsh # 方法二: usermod -s /b…...

[ZJCTF 2019]NiZhuanSiWei1

打开题目 php代码审计 .从代码中可以看出要求&#xff0c;以get方式传递text,file,password三个参数。 3.第一层验证if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")) 传入text&#xff0c;而且file_get_contents($text,r)之后内容…...

【网络安全】副业兼职日入12k,网安人不接私活就太可惜了!

暑假来了&#xff0c;很多同学后台私信我求做兼职的路子&#xff0c;这里&#xff0c;我整理了一份详细攻略&#xff0c;请大家务必查收&#xff0c;这可能会帮你把几个学期的生活费都赚够&#xff01; Up刚工作就开始做挖漏洞兼职&#xff0c;最高一次赚了12k&#xff0c;后面…...

[STM32]HAL库实现自己的BootLoader-BootLoader与OTA-STM32CUBEMX

目录 一、前言 二、BootLoader 三、BootLoader的实现 四、APP程序 五、效果展示 六、拓展 一、前言 听到BootLoader大家一定很熟悉&#xff0c;在很多常见的系统中都会存在BootLoader。本文将介绍BootLoader的含义和简易实现&#xff0c;建议大家学习前掌握些原理基础。 …...

鸿萌数据备份服务:中小型企业如何策划及实施云备份方案

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据安全、数据备份、数据恢复、数据清除等解决方案与服务。 对于中小型企业来说&#xff0c;保护运营数据&#xff08;客户记录、财务文档和项目文件&#xff09;的重要性不言而喻…...

x264 编码过程中延迟逻辑分析

编码延迟相关参数 相关参数:在 common.h文件中 frames 结构体中声明关于编码延迟的变量int i_delay; /* Number of frames buffered for B reordering */ int i_bframe_delay; int64_t i_bframe_delay_time;编码延迟计算 编码延迟计算:在x264_encoder_open函数和x264_…...

前端框架 element-plus 发布 2.7.8

更新日志 功能 组件 [级联选择器 (cascader)] 添加持久化属性以提升性能 (#17526 by 0song)[日期选择器 (date-picker)] 类型添加月份参数 (#17342 by Panzer-Jack)[级联选择器 (cascader)] 添加标签效果属性 (#17443 by ntnyq)[加载 (loading)] 补充加载属性 (#17174 by zhixi…...

2024.8.1(前端服务器的配置以及tomcat环境的配置)

回顾 [roottomcat ~]# cd eleme_web/public/img/ [roottomcat img]# ls 1.jpg [roottomcat public]# cd [roottomcat ~]# cd eleme_web/ [roottomcat eleme_web]# cd src [roottomcat src]# vim views/HomeView.vue [roottomcat src]# nohup npm run serve ctrlc后网页不出…...

使用 宝塔面板 部署 语料库php网站

【语料库网站】宝塔面板 在线部署全过程 代码仓库&#xff1a;https://github.com/talmudmaster/RedCorpus 网站介绍 语料库提供双语文本检索和分享功能。供英语、翻译相关专业的爱好者&#xff0c;学生和老师学习使用。 该网站是对BiCorpus开源项目的二次开发。 技术栈&am…...

springboot农产品报价系统-计算机毕业设计源码37300

摘 要 本研究基于鸿蒙系统&#xff0c;设计开发了一款农产品报价系统小程序&#xff0c;旨在帮助商家与买家更便捷、高效地进行交易。该系统利用鸿蒙系统的优势&#xff0c;实现了跨平台应用程序的开发&#xff0c;同时利用定位技术和数据采集技术&#xff0c;为用户提供了个性…...

食源送系统项目的测试

一、对整个系统编写测试用例 功能测试 性能测试 兼容性测试 易用性测试 安全测试 二、接口测试 针对接口的功能测试&#xff0c;也就是检验接口是否按照接口文档输入输出 2.1 使用Postman发送HTTP请求 2.2 使用Java TestNG 编写自动化测试用例 登录界面功能 package com.sky.…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...

CTF show 数学不及格

拿到题目先查一下壳&#xff0c;看一下信息 发现是一个ELF文件&#xff0c;64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断&#xff0c;第一个argc ! 5这个判断并没有起太大作用&#xff0c;主要是下面四个if判断 ​ 根据题目…...