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

下一个排列 的 思路总结

文章目录

在这里插入图片描述

  • 思路分析
    • 倒序遍历:题目要求的是下一个排列,那么肯定数字的跳跃不能太大,所以可以比较好确定的是,遍历的顺序是倒序遍历
    • 比较方向:对于每一个数字,需要找到右边最大的比它小的数字,然后交换之后,剩余的数字进行升序排序

灵神题解

class Solution {
public:void nextPermutation(vector<int>& nums) {int n = nums.size();// 第一步:从右向左找到第一个小于右侧相邻数字的数 nums[i]int i = n - 2;while (i >= 0 && nums[i] >= nums[i + 1]) {i--;}// 如果找到了,进入第二步;否则跳过第二步,反转整个数组if (i >= 0) {// 第二步:从右向左找到 nums[i] 右边最小的大于 nums[i] 的数 nums[j]int j = n - 1;while (nums[j] <= nums[i]) {j--;}// 交换 nums[i] 和 nums[j]swap(nums[i], nums[j]);}// 第三步:反转 [i+1, n-1](如果上面跳过第二步,此时 i = -1)reverse(nums.begin() + i + 1, nums.end());}
};

错误代码示例

  • 我开始写的思路是,倒序遍历的思路没问题,但是找到合适的交换对象的时候,我找的是每一个数字左边第一个比它小的数字,然后交换的位置的右边再进行升序排列

  • 错误分析:下一个排列,应该是尽量操作右边的数字,并且我们是倒序遍历的,所以遍历过的部分的情况可以知道,所以寻找的交换顺序的时候,还是往右边进行考虑

http://www.xdnf.cn/news/17625.html

相关文章:

  • 从零开始的云计算生活——项目实战容器化
  • 标准IO详解(fgets、gets、fread、fwrite、fseek 等应用)
  • Java 包装类简单认识泛型
  • 《深度解构:React与Redux构建复杂表单的底层逻辑与实践》
  • C#使用EPPlus读写Excel
  • ubuntu20.04交叉编译vlc3.0.21 x64 windows版本
  • 大模型落地:AI 技术重构工作与行业的底层逻辑
  • Pytest 全流程解析:执行机制与报告生成实战指南
  • java 插入式注解的打开方式!
  • MySQL,Redis重点面试题
  • SQL179 每个6/7级用户活跃情况
  • Spring Framework源码解析——BeanPostProcessor
  • 【学习嵌入式day-22-Linux软件编程-IO】
  • SpringBoot集成支付宝二维码支付接口详解
  • Python3.10 + Firecrawl 下载 Markdown 文档:构建高效通用文章爬虫
  • 不同FPGA开发板系统移植步骤
  • Chrome插件开发【Service Worker练手小项目】
  • 【LeetCode刷题集】--排序(三)
  • 【智能的起源】人类如何模仿,简单的“刺激-反应”机制 智能的核心不是记忆,而是发现规律并能迁移到新场景。 最原始的智能:没有思考,只有简单条件反射
  • Mamba 原理汇总2
  • AI(2)-神经网络(激活函数)
  • 支持小语种的在线客服系统,自动翻译双方语言,适合对接跨境海外客户
  • 数据结构-数组扩容
  • 开发指南130-实体类的主键生成策略
  • Apache ECharts 6 核心技术解密 – Vue3企业级可视化实战指南
  • 排错000
  • 基于 ZooKeeper 的分布式锁实现原理是什么?
  • windows上RabbitMQ 启动时报错:发生系统错误 1067。 进程意外终止。
  • 150V降压芯片DCDC150V100V80V降压12V5V1.5A车载仪表恒压驱动H6203L惠洋科技
  • git:分支