Leetcode 556. 下一个更大元素 III C++

Leetcode 556. 下一个更大元素 III

题目

给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。

测试样例

示例 1:

输入: 12
输出: 21

示例 2:

输入: 21
输出: -1

题解

找到最后一次发生递减的位置,即num[i]>num[i-1],我们让l=i-1。然后让低位,也就是l+1~n有序,我们在l+1 ~ n中找到大于nums[l]的第一个数的下标minI,交换num[l],num[minI,便得到最终答案。详细过程见代码

代码

	vector<int> getNum(int n){		//将数存到数组中
        vector<int> ans;
        while(n){
            ans.push_back(n % 10);
            n /= 10;
        }
        reverse(ans.begin(),ans.end());
        return ans;
    }
    int nextGreaterElement(int n) {
        vector<int> num = getNum(n);
        int x = num.size();
        int l = -1;
        for(int i=1; i<x; i++){		//找到最后一个发生递减的位置
            if(num[i]>num[i-1])
                l = i-1;
        }
        if(l == -1) return -1;
        reverse(num.begin()+l+1,num.end());		//使低位有序
        int minI = upper_bound(num.begin()+l+1,num.end(),num[l])-num.begin();
        swap(num[l],num[minI]);
        long ans=0;
        for(int i=0; i<x; i++){	//构造答案
            ans = ans*10 + num[i];
        }
        return ans>INT_MAX ? -1 : ans;
    }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-greater-element-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值