力扣思维题/经典面试题——下一个排序

这篇具有很好参考价值的文章主要介绍了力扣思维题/经典面试题——下一个排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

https://leetcode.cn/problems/next-permutation/description/
力扣思维题/经典面试题——下一个排序,算法,leetcode,排序算法,java字节面试题,非常经典的逻辑思维题

1、找到第一个下降点,说明这个点可以变得稍微大一点以至于让整个排列变得更加大
为什么,仔细想想,后面都是倒序了怎么都不可能变得更加大了

2、下降点变成多大呢?变成后面比它大的最小的数就可以了

3、这一位已经比原来的大了,后面不管怎么样,这个排列都会比原来的大,要是这个排列尽可能地小,只需要对后面的排个序

可以看一下这张图更加容易理解:
力扣思维题/经典面试题——下一个排序,算法,leetcode,排序算法,java代码:
力扣思维题/经典面试题——下一个排序,算法,leetcode,排序算法,java文章来源地址https://www.toymoban.com/news/detail-757426.html

class Solution {
    public void nextPermutation(int[] nums) {
        //从右至左找第一个下降点,如果找不到,说明是倒序排序翻转一下就可以了
        int down = -1;
        int cur = nums.length-1;
        while(cur>=1){
            if(nums[cur]>nums[cur-1]){
                down = cur-1;
                break;
            }
            cur--;
        }
        //找不到
        if(down==-1){
            for(int i=0;i<nums.length/2;i++){
                int temp = nums[i];
                nums[i] = nums[nums.length-i-1];
                nums[nums.length-i-1] = temp;
            }
            return ;
        }
        //找翻转哪一个点
        while(cur<nums.length){
            if(nums[cur]<=nums[down])
               break; 
            cur++;
        }
        //找到的是第一个小于等于down的,还要再-1;
        cur--;
        //这个数移到down
        int temp = nums[cur];
        nums[cur] = nums[down];
        nums[down] = temp;
        //再排个序
        //可以使用翻转,因为后面必定倒序
        //1、Arrays.sort(nums,down+1,nums.length);
        //局部反转写起来容易错,还是推荐直接排序
        for(int i=1;i<=(nums.length-(down+1)+1)/2;i++){
            int t = nums[down+i];
            nums[down+i] = nums[nums.length-i];
            nums[nums.length-i] = t;
        }
    }
}

到了这里,关于力扣思维题/经典面试题——下一个排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java实现七种经典排序算法

    简单算法:冒泡,简单选择,直接插入 改进算法:希尔,堆,归并,快速 直接插入排序:将一个记录插入到已经拍好的有序列表中,从而得到一个新的、记录数增加1的有序表。 冒泡排序:两两比较,反序交换。每趟将最大(小 )的浮到最上面或沉到最底下。 简单选择排序

    2024年02月15日
    浏览(30)
  • 成为一个合格程序员所必备的三种常见LeetCode排序算法

    排序算法是一种通过特定的算法因式将一组或多组数据按照既定模式进行重新排序的方法。通过排序,我们可以得到一个新的序列,该序列遵循一定的规则并展现出一定的规律。经过排序处理后的数据可以更方便地进行筛选和计算,从而大大提高了计算效率。因此,掌握排序

    2024年01月17日
    浏览(46)
  • 【Java面试题】Java基础——排序算法

    冒泡排序★★★ 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。 它重复的遍历过要排序的数列, 一次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来 。 这个算法的名字由来是因为越大的元素会经由交换慢慢\\\"浮\\\"到最后面。 当然,大家可以按照从大到小的

    2024年02月12日
    浏览(31)
  • 【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值

    《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌ 更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍 感谢小伙伴 们点赞、关注! class   Solution :      def   mySqrt ( self ,  x :   int )   -   int :       

    2024年02月04日
    浏览(63)
  • 面试官最常问的10道测试用例和5道思维面试题及答案,每1题都很经典

    软件测试面试中,测试用例是非常容被问到的一个点,今天小编就给大家把最常见的20道测试用例方面的问题给大家整理出来,希望对大家的面试提供帮  需要此大厂面试题集的可以加我群:786229024获取,也可以一起交流技术。 测试用例10道面试题 1、什么是测试用例 答:测

    2024年02月08日
    浏览(48)
  • 比较版本号(力扣)思维 JAVA

    给你两个版本号 version1 和 version2 ,请你比较它们。 版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订

    2024年02月15日
    浏览(35)
  • 矩阵置零(力扣)思维 JAVA

    给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]] 提示: m == matrix.length n == matrix[0].length

    2024年02月15日
    浏览(38)
  • 【leetcode 力扣刷题】字符串匹配之经典的KMP!!!

    以下是能用KMP求解的算法题,KMP是用于字符串匹配的经典算法【至今没学懂………啊啊啊】 题目链接:28. 找出字符串中第一个匹配项的下标 题目内容: 题意还是很好理解的,要在字符串haystack中查找一个完整的needle,即字符串匹配。 暴力求解就是用 两层循环 :haystack从第

    2024年02月09日
    浏览(40)
  • 【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)

    标签(题目类型):回文串、动态规划 原题:LeetCode 5 思路 Dynamic Programming(DP) 动态规划是一种将问题分解成子问题并分别计算的优化技术。对于回文子串,我们可以使用动态规划来解决。 对于一个子串而言,如果它是回文串,并且长度大于 2,那么将它首尾的两个字母去除之后

    2024年04月14日
    浏览(66)
  • python机器学习经典算法代码示例及思维导图(数学建模必备)

    最近几天学习了机器学习经典算法,通过此次学习入门了机器学习,并将经典算法的代码实现并记录下来,方便后续查找与使用。 这次记录主要分为两部分:第一部分是机器学习思维导图,以框架的形式描述机器学习开发流程,并附有相关的具体python库,做索引使用;第二部

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包