556. 下一个更大元素 III
556. 下一个更大元素 III
给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。
- 示例 1:
输入: 12
输出: 21 - 示例 2:
输入: 21
输出: -1
代码
class Solution {
public int nextGreaterElement(int n) {
int[] array = transfer(n);
/*
求出的下一个全排列可能会超出int类型的范围
这并不符合得出的答案是32位的结果
所以我将结果用long保存
如果它超出了int的表示范围
就返回-1
*/
long result = nextArray(array);
if (result > Integer.MAX_VALUE) {
return -1;
}
return (int)result;
//return nextArray(array);
}
public long nextArray(int[] array) {
int length = array.length;
/*
* 第一步,寻找最后一个正序
* 寻找方法 : 从后向前找
*/
int i;
for (i = length-1; i > 0 ; i--) {
if (array[i-1] < array[i]) {
break;
}
}
/*
* 如果没找到,也就是到了最后的一个
*/
if (i == 0) {
return -1;
}
/*
*第二步,从后往前找一个比array[i-1]大的第一个数字.
*/
int j;
for (j = length-1; j > i; j --) {
if (array[j] > array[i-1]) {
break;
}
}
/*
第三步,交换array[i-1],array[j]
*/
int temp = array[i-1];
array[i-1] = array[j];
array[j] = temp;
/*
最后一步,把i-1后面(从i-2开始至length-1)的序列反序
*/
while (i < length-1) {
temp = array[i];
array[i] = array[length-1];
array[length-1] = temp;
i ++;
length --;
}
/*
反序完毕即为一次排列结束
得到的序列就是下一个全排列
*/
long result = 0;
for (int index = 0; index < array.length; index++) {
result *= 10;
result += array[index];
}
return result;
}
private int[] transfer(int n) {
String str = Integer.toString(n);
int[] arr = new int[str.length()];
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
}
return arr;
}
}
556. 下一个更大元素 III的更多相关文章
- LeetCode 556. 下一个更大元素 III(Next Greater Element III)
556. 下一个更大元素 III 556. Next Greater Element III 题目描述 给定一个 32 位正整数 n,你需要找到最小的 32 位整数,其与 n 中存在的位数完全相同,并 ...
- Java实现 LeetCode 556 下一个更大元素 III(数组的翻转)
556. 下一个更大元素 III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 1 ...
- Leetcode 556.下一个更大元素III
下一个更大元素III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 12 输出: ...
- [Swift]LeetCode556. 下一个更大元素 III | Next Greater Element III
Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly th ...
- LeetCode 503. 下一个更大元素 II(Next Greater Element II)
503. 下一个更大元素 II 503. Next Greater Element II 题目描述 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 ...
- LeetCode 496. 下一个更大元素 I(Next Greater Element I) 35
496. 下一个更大元素 I 496. Next Greater Element I 题目描述 给定两个没有重复元素的数组 nums1 和 nums2,其中 nums1 是 nums2 的子集.找到 ...
- [Swift]LeetCode496. 下一个更大元素 I | Next Greater Element I
You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...
- [Swift]LeetCode503. 下一个更大元素 II | Next Greater Element II
Given a circular array (the next element of the last element is the first element of the array), pri ...
- Leetcode 496. 下一个更大元素 I
1.题目描述 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 ...
随机推荐
- Vue 登录/登出以及JWT认证
1. 后端代码概览 server/router/index.js 请求 router.get('/getUserInfo', function (req, res, next) { // 登录请求 r ...
- axios+Qs请求数据转表单格式
import axios from 'axios' import qs from 'qs' axios.post('http://localhost:8888/baseitem/update', qs ...
- JavaGuide
最近在看JavaGuide整理的java文档 仅此记录
- Win10环境下Hadoop(单节点伪分布式)的安装与配置--bug(yarn的8088端口打不开+)
一.本文思路 [1].配置java环境–JDK12(Hadoop的底层实现语言是java,hadoop运行需要JDK环境) [2].安装Hadoop 1.解压hadop 2.配置hadoop环境变量 ...
- linux学习(二)认识Linux
一.Linux系统的组成 linux内核(linus 团队管理) shell:用户与内核交互的接口 文件系统:ext3.ext4等.windows 有 fat32 .ntfs 第三方应用软件 二.Li ...
- ip子网掩码计算及子网划分
为什么要懂 子网掩码计算,及子网划分属于网络基础知识.一般在几个地方会用到: 公司避免产生网络风暴而划分子网,帮助路由器判断对应主机是否在同一个网段中 服务器相互隔离而划分子网,一般机房管理人员规划: ...
- LinkedList,ArrayList,HashMap,TreeMap
hashMap是无序的,TreeMap是有序的(hashmap是一个链表,而treemap实现了sortedmap()接口所以有序,其实现同时实现比较器) hashSet的底层是根据HashMap来存 ...
- c#数据处理总结(分组、交并差与递归)
前言:最近项目比较忙,完全没有时间写下总结笔记,今天抽出时间来写下笔记,供写后台的你来做数据处理后台代码编写的参考. 一.分组 var GroupForList = numberList.GroupB ...
- pytorch和tensorflow的爱恨情仇之定义可训练的参数
pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量 pytorch版本:1.6.0 tensorflow版本:1.15.0 之前我们就已 ...
- 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”
011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...