LeetCode-556. 下一个更大元素 III

题目来源

556. 下一个更大元素 III

题目详情

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

注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1

示例 1:

输入: n = 12
输出: 21

示例 2:

输入: n = 21
输出: -1

提示:

  • 1 <= n <="231" - 1< code><!--=-->

相似题目

31. 下一个排列
556. 下一个更大元素 III

题解分析

解法一:双指针法

LeetCode-556. 下一个更大元素 III
class Solution {
    public int nextGreaterElement(int n) {
        StringBuilder s = new StringBuilder(String.valueOf(n));
        int len = s.length();
        int i = len - 2;
        // 找到第一个相对靠右的较小值,只有改变这个位置的值才有可能得到下一个更小的排列
        while(i >= 0 && s.charAt(i) >= s.charAt(i+1)){
            i--;
        }
        if(i < 0){
            return -1;
        }
        int j = len - 1;
        // 找到第一个靠右的,大于nums[i]的较大值
        while(j >= 0 && s.charAt(i) >= s.charAt(j)){
            j--;
        }
        // 交换这两个较小值和较大值
        swap(s, i, j);

        int left = i+1, right = len - 1;
        while(left < right){
            swap(s, left, right);
            left++;
            right--;
        }
        int maxs = Integer.MAX_VALUE;
        long ans = Long.parseLong(s.toString());
        return ans > maxs ? -1 : (int) ans;
    }

    private void swap(StringBuilder sb, int i, int j){
        char temp = sb.charAt(i);
        sb.setCharAt(i, sb.charAt(j));
        sb.setCharAt(j, temp);
    }
}

Original: https://www.cnblogs.com/GarrettWale/p/16114560.html
Author: Garrett_Wale
Title: LeetCode-556. 下一个更大元素 III

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583180/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • NoteOfMySQL-13-事务与并发控制

    一、事务简介 存储引擎如InnoDB、BDB才支持事务处理。 每个事务(transaction)的处理必须满足ACID原则: 原子性(Atomicity): 原子性指每个事务都必须…

    Linux 2023年6月14日
    0120
  • 记录XorDDos木马清理步骤

    1.检查 查看定时任务文件发现有两个异常定时任务 [root@manage ~]# cat /etc/crontab user-name command to be execute…

    Linux 2023年6月7日
    088
  • 雷霆传奇H5光柱版游戏详细图文架设教程

    前言 想体验经典传奇的热血PK吗?想体验满级VIP的尊贵吗?想体验一刀99999的爽快吗?各种极品炫酷时装、坐骑、翅膀、宠物通通给你,就在光柱版雷霆传奇H5! 本文讲解雷霆传奇架设…

    Linux 2023年6月7日
    0130
  • python数据结构与算法(1)—时间复杂度

    一.数据结构基础 1.数据结构概念 就是一组数据在内存中的存储形式,也是对基本数据类型的一次封装 也是数据对象中数据元素之间的关系。 算法与数据结构的区别: 数据结构只是静态的描述…

    Linux 2023年6月6日
    072
  • Linux搭建SVN服务器详细教程

    前言 本文讲解Linux系统下如何搭建SVN服务器,详细说明各配置项的功能,最终实现可管控多个项目的复杂配置。 SVN是subversion的缩写,是一个开放源代码的版本控制系统,…

    Linux 2023年6月7日
    090
  • spring boot实现不同生产环境下的文件配置

    spring boot项目开发时不同开发环境,打包生成不同的文件。(避免生产环境得到开发环境时的配置文件) 配置不同生产环境 本文适用于开发环境下需要打包项目至生产环境,避免开发环…

    Linux 2023年6月7日
    083
  • 小公司比较吃亏的两道微服务面试题

    其实选择工作的时候,很多技术牛人都会选择一些小而美的公司,技术全面,能够以一个更全面的视角看整个公司的运作,人和人之间的相处也很简单。但是,有两道微服务的面试题,小公司的朋友们会比…

    Linux 2023年6月14日
    0100
  • mysql存储中文乱码

    表现 前端页面,封装到html里的中文可以显示,和后台相关的中文显示都是 ??? 。查看network请求,传参正常。 查看mysql编码,是utf8。再看连接数据库的JDBC设置…

    Linux 2023年6月8日
    082
  • Linux系统Oracle常见操作

    1.1 登录默认数据库 首先切换到oracle用户,用数据库默认管理员登录。 [root@tsm-zh01 ~]# su – oracle [oracle@redhat ~]$ l…

    Linux 2023年6月6日
    072
  • Docker 容器虚拟化

    Docker 容器虚拟化 1、虚拟化网络 Network Namespace 是 Linux 内核提供的功能,是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自网络…

    Linux 2023年6月7日
    0118
  • lvs负载均衡

    Lvs 一.Lvs简介 二. 体系结构 三. Lvs管理工具 1. ipvs 2. ipvsadm 四.lvs工作模式及原理 1.NAT模式 2. DR模式 3.TUN模式(隧道模…

    Linux 2023年6月7日
    0107
  • lab 1

    int father[2],son[2]; int son[2]; if (fork() == 0) { int n; char buf[1]; close(0); dup(fat…

    Linux 2023年6月7日
    060
  • js中对象深度拷贝的方法(浅拷贝)

    JS中,一般的赋值传递的都是对象/数组的引用,并没有真正的深拷贝一个对象(浅拷贝),某些情况下需要用到深度拷贝,可以使用如下写法 let data = {username:&quo…

    Linux 2023年6月14日
    096
  • 位图

    例题1 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。 首先肯定不能用传统的int数据存储 因为内存不够 40亿的整数大概为1…

    Linux 2023年6月13日
    080
  • MySQL——锁和事务管理

    保证数据安全的一种手段。防止数据文件同时被多个用户同时修改,从而造成数据的破坏。 读锁:S锁,例如给一个表加了读锁以后,大家都能读表里面的内容(只能读不能改) 写锁:X锁。加了写锁…

    Linux 2023年6月7日
    077
  • Python环境安装

    一、下载地址: Python:Download Python | Python.org PyCharm:Download PyCharm: Python IDE for Profe…

    Linux 2023年6月13日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球