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

LeetCode 31题:下一个排列

目录

题目

思路

代码


题目

整数数组的一个 排列  就是将其所有成员以序列或线性顺序排列。

  • 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3][1,3,2][3,1,2][2,3,1] 。

整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。

  • 例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。
  • 类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。
  • 而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。

给你一个整数数组 nums ,找出 nums 的下一个排列。

必须 原地 修改,只允许使用额外常数空间。

示例 1:

输入:nums = [1,2,3]
输出:[1,3,2]

示例 2:

输入:nums = [3,2,1]
输出:[1,2,3]

示例 3:

输入:nums = [1,1,5]
输出:[1,5,1]

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 100

思路

一串数字排列的下一个排序找法是:从末尾开始找第一次出现nums[ i ] >nums[ i-1 ] 的位置,在 i -1之前的数字排序不变,在 i -1之后寻找大于nums[ i-1 ]的最小值,找到后与nums[ i-1 ]交换。交换后,i - 1之后的数字按非递减排序即可。


代码

#include<stdio.h>
#include<stdlib.h>void nextPermutation(int* nums, int numsSize);int main()
{int nums[3]={1};int size=1;nextPermutation(nums,size);for(int i=0;i<size;i++){printf("%d ",nums[i]);}return 0;
}void nextPermutation(int* nums, int numsSize)
{int sign=0;int i;for(i=numsSize-1;i>0&&nums[i]<=nums[i-1];i--);if(numsSize==1)return ;if(i==0&&nums[i+1]<=nums[i]){int left=0,right=numsSize-1;while(left<right){int x=nums[left];nums[left]=nums[right];nums[right]=x;left++;right--;}}else{int target=i;int min=nums[i];for(int j=i+1;j<numsSize;j++){if(nums[j]>nums[i-1]&&nums[j]<min){min=nums[j];target=j;}}int a=nums[target];nums[target]=nums[i-1];nums[i-1]=a;int len=numsSize-i;for(int p=len/2;p>=1;p=p/2){for(int q=i+p;q<numsSize;q++){int temp=nums[q];int j;for(j=q-p;j>=i&&nums[j]>temp;j=j-p){nums[j+p]=nums[j];}nums[j]=temp;}}}
}

 

 

http://www.lryc.cn/news/118730.html

相关文章:

  • CMake:检测python模块和包
  • 02Mysql之多表查询--例题讲解
  • 虹科方案 | 汽车总线协议转换解决方案
  • Mr. Cappuccino的第59杯咖啡——简单手写SpringIOC框架
  • 爬虫 学习HTML标签和元素的基本概念,了解网页的结构和内容
  • mysql将id重新修改为递增
  • http、https笔记
  • 飞凌嵌入式「国产」嵌入式核心板大盘点(三)——龙芯中科、赛昉科技
  • 以vue2为例,用npm开发环境在后端部署vue2项目(更推荐使用nginx部署)
  • docker容器监控:Cadvisor +Prometheus+Grafana的安装部署
  • 前端食堂技术周刊第 93 期:7 月登陆 Web 平台的新功能、Node.js 工具箱、Nuxt3 开发技巧、MF 重构方案
  • 获取 Android 的 SHA1 值
  • ! [remote rejected] develop -> develop (pre-receive hook declined)
  • 最强的表格组件—AG Grid使用以及License Key Crack
  • 【算法】逆波兰表达式
  • 添加SQLCipher 到项目中
  • 轻松预约,尽享美食,详解餐厅预约小程序的设计与实现
  • 数据结构--栈和队列3.1(栈-顺序结构)
  • pdf怎么压缩到1m?这样做压缩率高!
  • AttentionFreeTransformer 源码解析(一):AFTFull、AFTSimple、AFTLocal
  • C++ 计算 拟合优度R^2
  • Springboot-Retrofit HTTP工具框架快速使用
  • 微信小程序实现人脸识别(从一个没有开通人脸核身的小程序跳转到要给开通人脸核身的小程序,进行人脸识别后再跳转回来)
  • CSS-grid布局
  • 【JavaEE进阶】Bean 作用域和生命周期
  • 3分钟自建查分系统?现在每个人都可以实现了
  • 关于APP备案、小程序备案的问题,如何备案?
  • git上传代码后,如何清空历史日志以及文件操作,重新上传?以及上传代码
  • 超导热催生meme,换汤不换药的投机轮回
  • 【HashMap】 73. 矩阵置零