目录

  • 问题
  • 示例
  • 分析

问题

该文章已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4965 访问。

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

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

以下是一些例子,输入位于左侧列,其相应输出位于右侧列。

1,2,3 → 1,3,2

3,2,1 → 1,2,3

1,1,5 → 1,5,1


Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be in-place and use only constant extra memory.

Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.

1,2,3 → 1,3,2

3,2,1 → 1,2,3

1,1,5 → 1,5,1

示例

该文章已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4965 访问。

public class Program {public static void Main(string[] args) {var nums = new int[] { 1, 6, 9, 4, 2, 1 };NextPermutation(nums);ShowArray(nums);Console.ReadKey();}private static void ShowArray(int[] nums) {foreach(var num in nums) {Console.Write($"{num} ");}Console.WriteLine();}public static void NextPermutation(int[] nums) {var i = 0;var j = 0;var n = nums.Length;//从右往左找到第一个“逆行”的数字,此案例是 6,索引为 i//从右往左再找到第一个比“逆行数字”大的数字,此案例是 9//交换6、9,并将索引 i 之后的部分反转(原来为从大到小,改成从小到大)for(i = n - 2; i >= 0; i--) {if(nums[i + 1] > nums[i]) {for(j = n - 1; j >= i; j--) {if(nums[j] > nums[i]) break;}var swap = nums[i];nums[i] = nums[j];nums[j] = swap;Array.Reverse(nums, i + 1, nums.Length - (i + 1));//可以返回了return;}}//如果已经是最大的了,直接反转成最小的Array.Reverse(nums, 0, nums.Length);}}

以上给出1种算法实现,以下是这个案例的输出结果:

该文章已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4965 访问。

1 9 1 2 4 6

分析

显而易见, 以上算法的时间复杂度为:O(n2)O(n^2)O(n2) 。

C#LeetCode刷题之#31-下一个排列(Next Permutation)相关推荐

  1. LeetCode 31. 下一个排列 Next Permutation

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...

  2. 【leetcode刷题】51.下一个更大元素 I——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 算法不行,现在语文也不行了.我哭了,你们呢? --leetcode此题热评 前言 哈喽,大家好,我是一条. 糊涂算法,难得糊涂 & ...

  3. LeetCode每日一题--31. 下一个排列(数学)

    题目:跳转至 31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原 ...

  4. 【LeetCode】【HOT】31. 下一个排列

    [LeetCode][HOT]31. 下一个排列 文章目录 [LeetCode][HOT]31. 下一个排列 package hot;import java.util.Arrays;public cl ...

  5. Java实现 LeetCode 31下一个排列

    31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...

  6. 72.编辑距离105.前序中序遍历序列构造二叉树151.翻转字符串里的单词104.二叉树的最大深度76.最小覆盖子串110.平衡二叉树31.下一个排列

    72.编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 .你可以对一个单词进行如下三种操作:插入一个字符,删除一个字符,替换一个字符. ...

  7. Leetcode 31. 下一个排列 (每日一题 20210831)

    实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数).如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列).必须 原地 ...

  8. LeetCode 热题 HOT 100 -------31. 下一个排列(数组,数学问题)128. 最长连续序列(数组) 11. 盛最多水的容器(数组) 621. 任务调度器 (数组)

    dsadas /**思路:找下一个排列,并且尽可能小,所以我们应该找一序列中从左边开始的"较小值"与"较大值"交换,但是为了尽可能小应该满足: 1." ...

  9. LeetCode 30串联所有单词的子串31下一个排列

    标题 串联所有单词得字串 下一个排列 维护真的不易,如有帮助还请点赞关注,关注公众号bigsai回复进群即可加入打卡. 串联所有单词得字串 题目描述: 给定一个字符串 s 和一些长度相同的单词 wor ...

  10. 【LeetCode笔记】31. 下一个排列(Java、原地算法、偏数学)

    文章目录 题目描述 思路 && 代码 二刷 打卡第八天- 题目描述 需要花点时间思考的一道题,这篇题解写得很好. 思路 && 代码 主要分为这三个步骤: 从后往前找到满 ...

最新文章

  1. java线程的状态及状态间的切换
  2. 一次打包,无限复用!教你用 PyCharm 搭建一劳永逸的开发环境
  3. Redis 多线程网络模型全面揭秘|网络硬核系列
  4. mysql报错last packet_mysql The last packet successfully received
  5. 分布式应用中的一致性协议
  6. 倒计时1天,盛会将至,长沙 · 1024程序员节全日程曝光(附参会指南)
  7. Nginx开启访问日志记录
  8. ELK详解(二十一)——elastalert介绍与安装
  9. JavaScript 和 React,React用了大量语法糖,让JS编写更方便。
  10. python 爬取视频真实地址_java_爬虫_从腾讯视频播放界面爬取视频真实地址
  11. 《21天学通C语言(第7版)》一2.4 小 结
  12. 数据结构试卷三(含答案)
  13. 大白话理解可达性分析算法
  14. x86 android 显卡 tablet2,随心而变 ThinkPad Tablet 2评测
  15. 红米手机5 Plus启用root超级权限的步骤
  16. BDTC 2017丨探索大数据在医疗行业的应用实践
  17. java上看小说软件_i悦读小说阅读软件 For java
  18. matplotlib 饼图 plt.pie()
  19. 软件设计原则和编码规范
  20. java下载微信支付账单_java微信支付,对账单下载

热门文章

  1. Python——Python3.6.0+Scrapy安装方法(总算没有bug了)
  2. 【AI视野·今日Robot 机器人论文速览 第三十一期】Fri, 15 Apr 2022
  3. SpringBoot—JPA: javax.persistence.TransactionRequiredException
  4. TreeView的基本使用 1205
  5. idea下载与安装 0913
  6. 爬虫-14-利用代理爬取数据
  7. django-模型类管理器-create方法-models属性
  8. MySQL ALTER TABLE报错Duplicate entry 'xxx' for key 'PRIMARY'解决方法
  9. Yii2 理解Validator
  10. C++头文件,预处理详解