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

Leetcode 下一个排列

在这里插入图片描述

首先理解整数的字典序,字典序排列总是优先让“较小的”元素出现在前面。字典序的排列规则类似于字典中的单词排列方式,从左到右逐位比较,较小的数字优先出现。按照正整数元素排列的字典序,如果将每个排列视为一个整数值,那么这些排列确实是以升序排列的。

例如,对于数组 [1, 2, 3, 4],字典序排列如下:

  1. [1, 2, 3, 4] → 1234
  2. [1, 2, 4, 3] → 1243
  3. [1, 3, 2, 4] → 1324
  4. [1, 3, 4, 2] → 1342
  5. [1, 4, 2, 3] → 1423
  6. [1, 4, 3, 2] → 1432
  7. [2, 1, 3, 4] → 2134
  8. [2, 1, 4, 3] → 2143
  9. [2, 3, 1, 4] → 2314
  10. [2, 3, 4, 1] → 2341
  11. [2, 4, 1, 3] → 2413
  12. [2, 4, 3, 1] → 2431
  13. [3, 1, 2, 4] → 3124
  14. [3, 1, 4, 2] → 3142
  15. [3, 2, 1, 4] → 3214
  16. [3, 2, 4, 1] → 3241
  17. [3, 4, 1, 2] → 3412
  18. [3, 4, 2, 1] → 3421
  19. [4, 1, 2, 3] → 4123
  20. [4, 1, 3, 2] → 4132
  21. [4, 2, 1, 3] → 4213
  22. [4, 2, 3, 1] → 4231
  23. [4, 3, 1, 2] → 4312
  24. [4, 3, 2, 1] → 4321

在这里插入图片描述

如果只有一个元素,下一个排列是其本身。

java 实现代码

class Solution {public void nextPermutation(int[] nums) {int n = nums.length;if(n < 2) return; //由于返回类型是void,所以如果只有一个元素,下一个排列是其本身。int i = n - 2; // i 是从右往左第一个两个相邻元素中前面的元素小于后面的元素时,前面这个元素的索引位置while(i >= 0 && nums[i] >= nums[i + 1]) {i--;}if(i >= 0) {//寻找比nums[i]大的最小元素int j = n - 1;//此时i右端所有元素相当于是逆序递减排列,//所以j从最右端开始遍历,第一个比i大的元素就是比nums[i]大的最小元素while(nums[j] <= nums[i]) {j--;}//交换nums[j] 和 nums[i]swap(nums, i, j); // swap交换数组nums下标i和j上的元素}//如果是字典序最大的排序此时, i == -1, i + 1 == 0reverse(nums, i + 1, n - 1); //理解从 i + 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) { //交换数组下标i和j上的元素int temp;temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

相关文章:

Leetcode 下一个排列

首先理解整数的字典序&#xff0c;字典序排列总是优先让“较小的”元素出现在前面。字典序的排列规则类似于字典中的单词排列方式&#xff0c;从左到右逐位比较&#xff0c;较小的数字优先出现。按照正整数元素排列的字典序&#xff0c;如果将每个排列视为一个整数值&#xff0…...

WPF中的布局

布局原则 1、不显式设置元素大小。 2、不使用绝对定位。 元素应该根据容器的内容来进行排列。绝对定位在开发前期会带来一些便捷&#xff0c;但扩展性比较差。一旦显示器尺寸或分辨率发生改变&#xff0c;界面的显示效果可能会达不到预期的效果。 3、布局容器可以嵌套使用 常…...

【Spring】Spring和SpringMVC为什么需要父子容器

Spring和Spring MVC使用父子容器的设计模式&#xff0c;主要是为了实现更好的模块化和隔离&#xff0c;提高系统的灵活性和可维护性。具体来说&#xff0c;Spring应用通常包含两个层次的容器&#xff1a;根容器&#xff08;Root WebApplicationContext&#xff09;和子容器&…...

Origin制图——双轴线图实现

1.在我们平常的画图中&#xff0c;我们会遇到属于差别比较的两个数据&#xff0c;但是画两个图又太占地方了&#xff08;难以实现对数据的比较工作&#xff09;&#xff0c;我们想把它画在一个图上&#xff0c;那么怎么实现呢。首先我们输入导入&#xff0c;可以选择excal文件导…...

【算法系列-哈希表】两个集合的交集问题

【算法系列-哈希表】两个集合的交集问题 文章目录 【算法系列-哈希表】两个集合的交集问题1. 两个集合的交集问题(LeetCode 349)1.1 思路分析&#x1f3af;1.2 代码示例&#x1f330; 2.两个集合的交集问题II(LeetCode 350)2.1 思路分析&#x1f3af;2.2 代码示例&#x1f330;…...

linux 效率化 - zsh + tmux

文章目录 简介涉及的资料/代码仓库让我们开始吧1. Oh my Zsh!2. 终端主题 - powerlevel10k &#xff08;赋能优雅终端界面&#xff09;3. Oh my Tmux!安装完成&#xff0c;再加点料1. tmux2. zsh 结语参考资料 简介 来看一段操作演示&#xff08;全程键盘&#xff0c;没有鼠标…...

Python学习-函数

函数 文章目录 函数定义与调用参数传递内存分析返回值参数定义默认值参数个数可变的参数关键字参数 变量的作用域 匿名函数基本语法示例lambda与排序高阶函数map函数reduce函数filter函数 多关键字排序 定义与调用 函数可以嵌套用 先定义后调用 def calc(a,b):cabreturn cre…...

点评项目-4-隐藏敏感信息、使用 redis 优化登录业务

一、隐藏敏感信息 之前我们对 /user/me 路径&#xff0c;直接返回了登录的所有用户信息&#xff0c;其中的 passward 等敏感信息也会被返回到前端&#xff0c;这是很危险的&#xff0c;故我们需要选择性的返回用户信息&#xff0c;隐藏敏感用户信息 我们可以创建一个 UserDTO…...

Redis异步实现解析

目录 1. Redis 异步方式1.1 同步连接优点缺点示例&#xff1a;访问 Redis&#xff0c;并对 counter 实现自增1000次&#xff0c;统计用时 1.2 异步连接优点缺点1.2.1 Redis 驱动1.2.2 示例第1步&#xff1a;实现 Reactor第2步&#xff1a;实现 Redis 适配器第3步&#xff1a;实…...

matlab 相关

1、xcorr 本质上是两个函数做内积运算 相关算法有两种&#xff1a; 在Matlab上既可以 1.用自带的xcorr函数计算互相关&#xff0c;2.通过在频域上乘以共轭复频谱来计算互相关&#xff1b; 网友验证程序 clc;clear;close all; % s1,s2为样例数据 s1 [-0.00430297851562500;-…...

从组会尴尬到学术突破:Transformer助力跨域推荐解析

最近学习了Transformer模型&#xff0c;突然意识到我常阅读的一篇论文中也使用了Transformer。回想起上次开组会时&#xff0c;老师问我论文中的模型是什么&#xff0c;我当时没有答上来&#xff0c;现在才发现其实用的就是Transformer。这种学习过程让我深感&#xff0c;学得越…...

【Flutter、H5、Web?前端个人总结】分享从业经历经验、自我规范准则,纯干货

前言 hi&#xff0c;正式接触web前端已经经过了两年的时间&#xff0c;从大学的java后端转型到web前端&#xff0c;再到后续转战Flutter&#xff0c;逐渐对前端有了一些心得体会&#xff0c;其实在当下前端的呈现形式一直在变化&#xff0c;无论你是用原生、还是web还是混编的…...

mysql主从配置

一、准备工作 准备两个版本一致的数据库。 确认主库开启二进制日志&#xff0c;并配置server-id。 $ ##将 mysql的配置文件/home/mysql2/mysql/my.cnf 中关于二进制日志的配置 $ cd /home/mysql2/mysql/ $ vi my.cnf 修改如下 server-id 11 #log settings log_error erro…...

sklearn pipeline

示例代码 from sklearn.pipeline import Pipeline from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB import numpy as np import scipy.linalg from sklearn.preprocessing import LabelEncoder, StandardScaler …...

springboot实现服务注册与发现

在Spring Boot应用中实现服务注册与发现通常使用Spring Cloud框架&#xff0c;其中Eureka和Consul是两个常用的服务注册与发现组件。以下是使用Eureka来实现服务注册与发现的基本步骤。 准备工作 添加依赖&#xff1a;在你的Spring Boot项目的pom.xml文件中添加Eureka相关的依…...

美格智能亮相2024中国移动全球合作伙伴大会,共赢AI+时代

2024年10月11日至13日&#xff0c;主题为“智焕新生 共创AI时代”的2024中国移动全球合作伙伴大会&#xff0c;在广州琶洲保利世贸博览馆召开&#xff0c;作为中国移动重要的战略合作伙伴&#xff0c;美格智能亮相4号馆E22展位&#xff0c;与上百家知名企业共同展示最新数智化创…...

【LeetCode】动态规划—309. 买卖股票的最佳时机含冷冻期(附完整Python/C++代码)

动态规划—309. 买卖股票的最佳时机含冷冻期 题目描述前言基本思路1. 问题定义2. 理解问题和递推关系状态定义&#xff1a;状态转移公式&#xff1a;初始条件&#xff1a; 3. 解决方法动态规划方法伪代码&#xff1a; 4. 进一步优化5. 小总结 Python代码Python代码解释总结 C代…...

IDE启动失败

报错&#xff1a;Cannot connect to already running IDE instance. Exception: Process 24,264 is still running 翻译&#xff1a;无法连接到已运行的IDE实例。异常:进程24,264仍在运行 打开任务管理器&#xff0c;找到PID为24264的CPU线程&#xff0c;强行结束即可。 【Ct…...

【Kubernetes】常见面试题汇总(六十)

目录 131. pod 一直处于 pending 状态&#xff1f; 132. helm 安装组件失败&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-113 属于…...

maven dependency中scope的取值类型

在 Maven 中&#xff0c;<scope> 标签用于定义依赖项的范围&#xff0c;以指定依赖在不同阶段的可见性和生命周期。以下是 Maven 中常见的 <scope> 取值类型的详细介绍&#xff1a; 1. **compile**&#xff1a; - 默认的依赖范围&#xff0c;适用于编译、测试和…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...