发现规律

  • 前言
  • 一、下一个排列
  • 二、逻辑分析与代码整理
  • 总结
  • 参考文献

前言

充分发挥主观能动性,找到题的个性所在,挖掘其特点,见招拆招,没有死板的套路,需要什么就用代码的分支/循环/递归/数据结构来完成即可。

一、下一个排列

二、逻辑分析与代码整理

package everyday.medium;// 下一个排列
public class NextPermutation {/*target:把nums整体当作一个数,这些数字不变,取下一个要求比原数大的组合。core:什么时比原来大的组合?寻找问题个性所在,其实从后往前找到一个非递增的数,然后把后面刚好比它大的数和其交换,再翻转后面的数即可。注:如果遍历完都没找到,那就是特殊情况,直接翻转。*/public void nextPermutation(int[] nums) {if (nums.length == 1) return;// 寻找非递增的那个数的idx,为了后面的交换。int i = nums.length - 2;while (i >= 0 && nums[i] >= nums[i + 1]) --i;int begin = 0;//翻转开始处,默认全部翻转。// 当i >= 0时,需要确定新的翻转开始处。if (i >= 0) {// 寻找需要交换的数字int idx = nums.length - 1;while (nums[idx] <= nums[i]) idx--;// 交换两者,且 i + 1 到 nums.length - 1保持单调递减,直接翻转。swap(nums, i, idx);// 确定从那里开始翻转begin = i + 1;}// 翻转reverse(nums, begin, nums.length);}public void reverse(int[] nums, int left, int right) {int mid = right - left >>> 1;for (int j = 0; j < mid; j++) {int t = nums[left + j];nums[left + j] = nums[right - 1 - j];nums[right - 1 - j] = t;}}// 交换两数。public void swap(int[] nums, int i, int j) {int t = nums[i];nums[i] = nums[j];nums[j] = t;}
}

总结

1)发挥主观能动性/思考力,发现问题个性,按逻辑写出代码,再整理逻辑代码。

参考文献

[1] LeetCode 下一个排列

下一个排列[发挥主观能动性发现规律]相关推荐

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

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

  2. (LeetCode)下一个排列

    目录 题目要求 题目理解以及思路分析 代码分部讲解 第一部分 第二部分 第三部分 第四部分 题目要求 整数数组的一个 排列  就是将其所有成员以序列或线性顺序排列. 例如,arr = [1,2,3] ...

  3. 数组的合并和升序排列_leetcode No.31 下一个排列

    题目链接: 下一个排列 - 力扣(LeetCode)​leetcode-cn.com 题目描述: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个 ...

  4. 全排列(下一个排列,算法)

    给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列.例如:S = "1312", 输出为: 1123 1132 1213 1231 1312 ...

  5. 《LeetCode力扣练习》第31题 下一个排列 Java

    <LeetCode力扣练习>第31题 下一个排列 Java 一.资源 题目: 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列. 例如,arr = [1,2,3] ,以下这些都可 ...

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

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

  7. 下一个排列—leetcode31

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

  8. Leecode31. 下一个排列——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...

  9. 下一个排列Python解法

    整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列. 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3].[1,3,2].[3,1,2].[2,3,1] . ...

  10. leetcode31. 下一个排列

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

最新文章

  1. 计算机应用论文2500字,计算机应用论文2500字:计算机基础.doc
  2. hash算法_一致性hash算法简介
  3. OpenCV捕获正弦波模式
  4. java 最新sql注入原因以及预防方案(易理解)
  5. NOIp #2011
  6. Java锁之公平和非公平锁
  7. 硬件加速下webview切换闪屏_网页渲染性能优化 —— 性能优化下
  8. 【渝粤题库】广东开放大学 互联网营销概论 形成性考核
  9. element-ui 左侧边栏el-menu组件: 路由跳转 - 案例篇
  10. 进程与线程的区别?--多线程与线程池
  11. 为什么要使用getter/setter
  12. 获取mysql存储过程返回值_从强网杯随便注浅析mysql存储过程
  13. 5 Tips for creating good code every day; or how to become a good software developer
  14. 去除桌面图标下的底色[XP系统]
  15. 常用wed扫描工具 awvs|appscan|Netsparker|Nessus
  16. HTC Vive榜单:盘点一周最受欢迎的VR应用
  17. 《计算机科学概论》目录—导读
  18. STM32采用串口DMA方式,发送数据
  19. 谷歌浏览器如何设置internet选项
  20. 23.2、Android -- OkHttp3 基础学习 自定义设置

热门文章

  1. 输出星期几的英文表示
  2. c语言黑熊,BLACK BRUIN黑熊扭矩马达C5510000AA
  3. Big Endian 和 Little Endian 详解
  4. m4s格式转换mp3_音乐怎么转换mp3格式
  5. 《OpenGL编程指南(原书第9版)》——2.8 SPIR-V
  6. Java基础——对象和类1(面向对象基本概念)
  7. css导航栏背景色透明,css如何设置背景颜色透明?css设置背景颜色透明度的两种方法介绍...
  8. Studio e.go!全游戏 CG100%+回想存档包
  9. MySQL 那些监控参数 问 答 (4)REDO AHI latch 锁
  10. 如何退出或卸载奇安信天擎软件