当前位置:网站首页>【556. 下一个更大元素 III】
【556. 下一个更大元素 III】
2022-07-03 13:10:00 【千北@】
来源:力扣(LeetCode)
描述:
给你一个正整数 n
,请你找出符合条件的最小整数,其由重新排列 n
中存在的每位数字组成,并且其值大于 n
。如果不存在这样的正整数,则返回 -1
。
注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1
。
示例 1:
输入:n = 12
输出:21
示例 2:
输入:n = 21
输出:-1
提示:
1 <= n <= 231 - 1
方法一:下一个排列
把 n 转换成字符串(字符数组),那么本题实际上是在求字符数组的 下一个排列,当不存在下一个排列时返回 −1。
代码:
class Solution {
public:
int nextGreaterElement(int n) {
auto nums = to_string(n);
int i = (int) nums.length() - 2;
while (i >= 0 && nums[i] >= nums[i + 1]) {
i--;
}
if (i < 0) {
return -1;
}
int j = nums.size() - 1;
while (j >= 0 && nums[i] >= nums[j]) {
j--;
}
swap(nums[i], nums[j]);
reverse(nums.begin() + i + 1, nums.end());
long ans = stol(nums);
return ans > INT_MAX ? -1 : ans;
}
};
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:5.8 MB, 在所有 C++ 提交中击败了57.91%的用户
复杂度分析
时间复杂度: O(logn)。
空间复杂度:O O(logn)。
方法二:数学
不转换成字符数组,如何用 O(1) 空间复杂度解决此题?
如果还要求不使用 64 位整数呢?
类似方法一,我们从 n 开始,不断比较其最低位数字和次低位数字的大小,如果次低位数字不低于最低位数字,则移除最低位数字,继续循环。循环结束后的 n 就对应着方法一的下标 i,即 nums 的前 i + 1 个字符。
对于方法一中下标 j 的计算也是同理。
代码:
class Solution {
public:
int nextGreaterElement(int n) {
int x = n, cnt = 1;
for (; x >= 10 && x / 10 % 10 >= x % 10; x /= 10) {
++cnt;
}
x /= 10;
if (x == 0) {
return -1;
}
int targetDigit = x % 10;
int x2 = n, cnt2 = 0;
for (; x2 % 10 <= targetDigit; x2 /= 10) {
++cnt2;
}
x += x2 % 10 - targetDigit; // 把 x2 % 10 换到 targetDigit 上
for (int i = 0; i < cnt; ++i, n /= 10) {
// 反转 n 末尾的 cnt 个数字拼到 x 后
int d = i != cnt2 ? n % 10 : targetDigit;
if (x > INT_MAX / 10 || x == INT_MAX / 10 && d > 7) {
return -1;
}
x = x * 10 + d;
}
return x;
}
};
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:5.7 MB, 在所有 C++ 提交中击败了94.76%的用户
复杂度分析
时间复杂度: O(logn)。
空间复杂度: O(1)。我们只需要常数的空间保存若干变量。
author:LeetCode-Solution
边栏推荐
- Start signing up CCF C ³- [email protected] chianxin: Perspective of Russian Ukrainian cyber war - Security confrontation and sanctions g
- 常见的几种最优化方法Matlab原理和深度分析
- Task5: multi type emotion analysis
- Task6: using transformer for emotion analysis
- Can newly graduated European college students get an offer from a major Internet company in the United States?
- PowerPoint 教程,如何在 PowerPoint 中將演示文稿另存為視頻?
- 用户和组命令练习
- The principle of human voice transformer
- Flink SQL knows why (7): haven't you even seen the ETL and group AGG scenarios that are most suitable for Flink SQL?
- Kivy教程之 如何通过字符串方式载入kv文件设计界面(教程含源码)
猜你喜欢
Flutter动态化 | Fair 2.5.0 新版本特性
Several common optimization methods matlab principle and depth analysis
[email protected]奇安信:透视俄乌网络战 —— 网络空间基础设施面临的安全对抗与制裁博弈..."/>
开始报名丨CCF C³[email protected]奇安信:透视俄乌网络战 —— 网络空间基础设施面临的安全对抗与制裁博弈...
When updating mysql, the condition is a query
KEIL5出现中文字体乱码的解决方法
这本数学书AI圈都在转,资深ML研究员历时7年之作,免费电子版可看
MySQL constraints
regular expression
This math book, which has been written by senior ml researchers for 7 years, is available in free electronic version
PowerPoint 教程,如何在 PowerPoint 中将演示文稿另存为视频?
随机推荐
Flink SQL knows why (VIII): the wonderful way to parse Flink SQL tumble window
道路建设问题
The shortage of graphics cards finally came to an end: 3070ti for more than 4000 yuan, 2000 yuan cheaper than the original price, and 3090ti
SwiftUI 开发经验之作为一名程序员需要掌握的五个最有力的原则
Mobile phones and computers can be used, whole people, spoof code connections, "won't you Baidu for a while" teach you to use Baidu
Flutter动态化 | Fair 2.5.0 新版本特性
Kivy教程之 如何通过字符串方式载入kv文件设计界面(教程含源码)
AI scores 81 in high scores. Netizens: AI model can't avoid "internal examination"!
Logseq evaluation: advantages, disadvantages, evaluation, learning tutorial
JS convert pseudo array to array
[sort] bucket sort
The difference between stratifiedkfold (classification) and kfold (regression)
顺序表(C语言实现)
Open PHP error prompt under Ubuntu 14.04
IBEM mathematical formula detection data set
Flink SQL knows why (XI): weight removal is not only count distinct, but also powerful duplication
Servlet
【电脑插入U盘或者内存卡显示无法格式化FAT32如何解决】
Unity embeddedbrowser browser plug-in event communication
JSON serialization case summary