LeetCode 刷题【31. 下一个排列】

31. 下一个排列

自己做

解:排序实现

cpp 复制代码
class Solution {
public: 
    void nextPermutation(vector<int>& nums) {
        int nums_len = nums.size();

        if(nums_len == 1)          //只有一个元素不处理,直接返回
            return;

        int i = nums_len - 2;       //前一元素
        int j = nums_len - 1;       //后一元素

        //找到前一元素比后一元素小的元素
        while(i >= 0 && nums[i] >= nums[j]){
            j = i;
            i--;                    //前移
        }

        //这里要么发现了前一元素(i = xxx)比后一元素小,要么整个数组都是倒序的(i = -1)
        //倒序的情况
        if(i == -1)                                          //如果数组是倒序的
            return sort(nums.begin(), nums.end());         //升序排序
            
        //找到比i大的最小值(从j往后的位置)

        //将i往后的元素重新排为升序
        vector<int>::iterator it = nums.begin();
        for(int z = 0; z < i + 1; z++)          //找到i+1位置的指针
            it++;

        sort(it,nums.end());                    //排序i+1往后的元素(升序)

        for(int z = j; z < nums_len; z++)
            if(nums[z] > nums[i]){                      //找到了
                //交换元素
                int temp = nums[z];
                nums[z] = nums[i];
                nums[i] = temp;
                break;
            }
            
        //交换后重新排序
        sort(it,nums.end());                    //排序i+1往后的元素(升序)

    }
};
相关推荐
luj_176816 小时前
元设计的诱惑与现实
c语言·开发语言·c++·经验分享·算法
小星星闪亮登场16 小时前
ST表--倍增思想
开发语言·数据结构·c++·算法·思维
马可家的菠萝16 小时前
Vue3 + Canvas 手绘笔记工程化实践:别把画布只当成一张 PNG
前端·vue.js·算法
watersink16 小时前
机器学习极大似然估计与EM算法
人工智能·算法·机器学习
叠层归一研究院16 小时前
如何用程序搭建一个 AGI 种子系统(一):从向量种子到无限生长引擎
人工智能·python·算法·机器学习·agi
科学实验家16 小时前
并 查集
算法
AI服务老曹17 小时前
视觉算法模型管理性能优化指南:多版本平滑升级、灰度与快速回滚实战
算法·性能优化
l12586517 小时前
# RAG重排序实战:硅基流动bge-reranker-v2-m3在线API vs 本地CrossEncoder,一篇讲透两种方案
数据库·人工智能·python·深度学习·算法·机器学习·langchain
创世宇图18 小时前
【AI量化交易实战】第06讲:小雅再升级——Talib指标库与K线形态量化
算法
机器学习之心18 小时前
CPO-SVR:用冠豪猪优化算法给支持向量回归机“自动调参“,一次预测多个指标
算法·回归·cpo-svr