1. 题目

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

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

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

2. 解题

  • 从后往前找,如果找到后面比前面大的,交换两个数位
  • 并将被交换的数位的后面从小到大排序
  • 注意最后结果如果大于INT_MAX,返回-1
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) 时间复杂度
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;}
};

LeetCode 556. 下一个更大元素 III相关推荐

  1. Java实现 LeetCode 556 下一个更大元素 III(数组的翻转)

    556. 下一个更大元素 III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 1 ...

  2. 2021-08-25556. 下一个更大元素 III

    556. 下一个更大元素 III 给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n .如果不存在这样的正整数,则返回 -1 . 注意 ,返回的 ...

  3. LeetCode 496. 下一个更大元素 I

    599. 两个列表的最小索引总和 添加链接描述 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和 ...

  4. LeetCode 496. 下一个更大元素 I(哈希)

    1. 题目 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x ...

  5. LeetCode 496. 下一个更大元素 I 解题思路及C++实现

    解题思路: 因为这两个int型的vector中不包含重复元素,所以考虑使用c++中的unordered_map,对num2进行遍历,找到每一个元素的下一个更大元素,这样的话,时间复杂度就是O(n). ...

  6. leetcode 503. 下一个更大元素 II(单调栈)

    给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...

  7. leetcode 503. 下一个更大元素 II

    给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...

  8. Java实现 LeetCode 503 下一个更大元素 II

    503. 下一个更大元素 II 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大 ...

  9. Java实现 LeetCode 496 下一个更大元素 I

    496. 下一个更大元素 I 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nu ...

最新文章

  1. python:编写登陆接口(day 1)
  2. php image mask,PHP GD使用一个图像来遮蔽另一个图像,包括透明度
  3. 量化交易系统综述——互联网金融之二
  4. 【终极方法】 Cannot create PoolableConnectionFactory (Unknown database ‘jdbc‘)
  5. What's blocking my lock? 转载
  6. bean注入属性_摆脱困境:将属性值注入配置Bean
  7. MySQL命令(二)| 表的增删查改、聚合函数(复合函数)、联合查询
  8. redis——内存概述
  9. 弗尤博客(十一)之搜索博文
  10. 【ES11(2020)】Promise 扩展 allSettled()
  11. SQL Server 函数的使用(字符串函数)
  12. json为java对象配置一个函数_Java基础/利用fastjson反序列化json为对象和对象数组...
  13. 删除任务管理器中的启动项
  14. WebEx Recorder
  15. TreeView 右键菜单
  16. 神经网络降噪python_Python实战图片验证码降噪处理
  17. 回到计算机桌面快捷键,win10系统如何使用返回桌面快捷键?快速返回到电脑桌面的方法...
  18. cocos creator游戏发布和部署-HTML5篇
  19. 微信小程序的tabBar属性
  20. Java猿社区—ShardingSphere之广播表与绑定表

热门文章

  1. mysql多主单向环形_mysql多主单向--gt;环形同步_MySQL
  2. mysql类 php100_php mysql 类
  3. s5pv210——LCD的原理和实战
  4. 以下题目需要当场编写实现,,答案自己写
  5. SQL Server Transactional Replication 中的 CommitBatchSize 和 CommitBatchThreshold 属性
  6. SQL条件语句(IF, CASE WHEN, IF NULL)
  7. div里嵌套了img底部会有白块问题和图片一像素问题解决
  8. OpenGL于MFC使用汇总(三)——离屏渲染
  9. 使用Axis2调用Web Service
  10. STL中vectortype的复制