golang力扣leetcode 31.下一个排列

简介: golang力扣leetcode 31.下一个排列

31.下一个排列

31.下一个排列

题解

题目:给一个数组,可以看出一个数字,求大于该数字 并且 最贴近该数字 的数,特别的如果这个数是降序,则返回升序即可

思路:

变大的幅度尽可能小
1. 将一个左边的「较小数」与一个右边的「较大数」交换
2. 让这个「较小数」尽量靠右,而「较大数」尽可能小
3. 这样可以在保证新排列大于原来排列的情况下,使变大的幅度尽可能小
  1. 我们希望找到一个新序列,大于当前序列,并且变大的幅度尽可能的小
  2. 以4,5,2,6,3,1为例
  3. 从后向前找到第一个nums[i] < nums[i+1],这样[i+1,n]是降序 nums[i]为[较小数]---------2
  4. [i+1,n]从后往前找第一个nums[j] > nums[i],称nums[j]为[较大数]---------3
  5. 交换nums[i]和nums[j],此时[i+1,n]还是降序
  6. 例子成为了4,5,3,6,2,1
  7. [i+1,n]升序-----4,5,3,1,2,6
  8. 答案就出来了

代码

func nextPermutation(nums []int) {
  i := len(nums) - 2
  j := len(nums) - 1
  //从后往前找相对小的数---[小数]
  for ; i >= 0; i-- {
    if nums[i] < nums[i+1] {
      break
    }
  }
  //此时[i+1,n]是降序
  //如果i=-1说明数组是降序排列,直接改成升序即可
  if i >= 0 {
    //从[i+1,n]中倒着找第一个大于 [小数] 的数---[大数]
    //为什么是第一个,因为这样较大数就尽可能小了
    for ; j >= i+1; j-- {
      if nums[i] < nums[j] {
        break
      }
    }
    //交换 大数 和 小数
    nums[i], nums[j] = nums[j], nums[i]
    //此时[i+1,n]还是降序
  }
  //将 大数 后面的所有升序
  sort.Ints(nums[i+1:])
}
目录
相关文章
|
2月前
|
算法 C++ 容器
Leetcode第三十一题(下一个排列)
这篇文章介绍了LeetCode第31题“下一个排列”的C++解决方案,该算法通过原地修改数组来找到下一个字典序更大的排列,如果不存在则重排为字典序最小的排列。
33 0
Leetcode第三十一题(下一个排列)
|
2月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
2月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
90 0
|
2月前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
31 0
|
2月前
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
56 0
|
4月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
56 0
|
5月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
36 0
|
3月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
136 4
Golang语言之管道channel快速入门篇
|
3月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
71 4
Golang语言文件操作快速入门篇
|
3月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
111 3
Golang语言之gRPC程序设计示例