前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 556. 下一个更大元素 III

LeetCode 556. 下一个更大元素 III

作者头像
Michael阿明
发布2020-07-13 17:16:20
2910
发布2020-07-13 17:16:20
举报

1. 题目

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

代码语言:javascript
复制
示例 1:
输入: 12
输出: 21

示例 2:
输入: 21
输出: -1

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

2. 解题

  • 从后往前找,如果找到后面比前面大的,交换两个数位
  • 并将被交换的数位的后面从小到大排序
  • 注意最后结果如果大于INT_MAX,返回-1
代码语言:javascript
复制
class Solution {
public:
    int nextGreaterElement(int number) {
        string str = to_string(number);//转成字符串
        if(str.size() <= 1)
        	return -1;//1位数,不存在
        int n = str.size(), i, j;
        bool found = false;
        for(i = n-2; i >= 0; --i)//从倒数第二位开始比较,被交换数位
        {
        	for(j = n-1; j > i; --j)
    		{
    			if(str[j] > str[i])
    			{
	    			swap(str[i],str[j]);
	    			found = true;
	    			break;
	    		}
    		}
        	if(found)
        		break;
        }
        if(!found)
        	return -1;
        sort(str.begin()+i+1,str.end());//交换后,i位后面的排序
        long num = 0;
        for(i = 0; i < n; ++i)
            num = num*10+str[i]-'0';//字符串转数字
        if(num > INT_MAX)
            return -1;
        return num;
    }
};
在这里插入图片描述
在这里插入图片描述
  • 优化下,O(n) 时间复杂度
代码语言:javascript
复制
class Solution {
public:
    int nextGreaterElement(int number) {
        string str = to_string(number);
        if(str.size() <= 1)
        	return -1;
        int n = str.size(), i=n-2, j=n-1;
        while(i >= 0 && str[i] >= str[i+1])
        	i--;//从后往前找到下降点
        if(i == -1)
        	return -1;
        while(j > i && str[j] <= str[i])
        	j--;//找到后面比交换点大的最小数
        swap(str[i],str[j]);//交换i,j数位

        i++; j=n-1;
        while(i < j)
        	swap(str[i++],str[j--]);//i后面的排序(后面是降序的)
        long num = 0;
        for(i = 0; i < n; ++i)
            num = num*10+str[i]-'0';
        if(num > INT_MAX)
            return -1;
        return num;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档