牛客NC324 下一个更大的数(三)【中等 双指针 Java/Go/PHP/C++】参考lintcode 52 · 下一个排列

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/475da0d4e37a481bacf9a09b5a059199

思路

第一步:获取数字上每一个数,组成数组arr
第二步:利用“下一个排列” 问题解题方法来继续作答,步骤:
    利用lintcode 52 下一个排列的解放方法
   从后往前找,找到第一对(i,j),i<j,使得 nums[i] < num[j] ,
   然后将两者交换后,后面部分排序即可。

Java代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return int整型
     */
    public int nextGreaterElement (int n) {
        //lintcode上类似的同一个道题52 · 下一个排列
        List<Integer> ll = new ArrayList<>();
        while (n > 0) {
            int mod = n % 10;
            n = n / 10;
            ll.add(mod);
        }

        int size = ll.size();
        int[] arr = new int[size];
        for (int i = 0; i < size ; i++) {
            arr[i] = ll.get(size - i - 1);
        }

        //利用lintcode 52 下一个排列的解放方法
        //从后往前找,找到第一对(i,j),i<j,使得 nums[i] < num[j] ,
        //然后将两者交换后,后面部分排序即可。
        for (int i = size - 1; i >= 0 ; i--) {
            for (int j = size - 1; j > i ; j--) {
                if (arr[i] < arr[j]) {
                    int t = arr[i];
                    arr[i] = arr[j];
                    arr[j] = t;
                    Arrays.sort(arr, i + 1, size);

                    String s = "";
                    for (int i1 : arr) {
                        s += i1;
                    }
                    //这个位置lintcode52是return arr
                    return Integer.valueOf(s);
                }
            }
        }

        return -1; //这个位置lintcode52是return 排序后的arr
    }
}

Go代码

package main

import "sort"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param n int整型
 * @return int整型
 */
func nextGreaterElement(n int) int {
	//类似的题目是lintcode 52下一个排列
	ll := []int{}
	for n > 0 {
		mod := n % 10
		n = n / 10
		ll = append(ll, mod)
	}

	size := len(ll)
	arr := make([]int, size)
	for i := 0; i < size; i++ {
		arr[i] = ll[size-i-1]
	}

	//利用lintcode 52 下一个排列的解放方法
	//从后往前找,找到第一对(i,j),i<j,使得 nums[i] < num[j] ,
	//然后将两者交换后,后面部分排序即可。
	for i := size - 1; i >= 0; i-- {
		for j := size - 1; j > i; j-- {
			if arr[i] < arr[j] {
				t := arr[i]
				arr[i] = arr[j]
				arr[j] = t
				arr1 := []int{}
				if i+1 < size {
					for k := i + 1; k < size; k++ {
						arr1 = append(arr1, arr[k])
					}
				}
				sort.Ints(arr1) //对i+1开始到最后的数字进行排序

				ans := 0
				for k := 0; k <= i; k++ {
					ans = ans*10 + arr[k]
				}
				for k := 0; k < len(arr1); k++ {
					ans = ans*10 + arr1[k]
				}

				return ans
			}
		}
	}

	return -1
}

PHP代码

<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return int整型
 */
function nextGreaterElement( $n )
{
     //类似的同一道题是lintcode 52 下一个排列
    $arr = [];
    while ($n >0){
        $mod = $n%10;
        $n =intval($n/10);
        array_unshift($arr,$mod);
    }

    //利用lintcode 52 下一个排列的解放方法
    //从后往前找,找到第一对(i,j),i<j,使得 nums[i] < num[j] ,
    //然后将两者交换后,后面部分排序即可。
    $size = count($arr);
    for($i=$size-1;$i>=0;$i--){
        for($j=$size-1;$j>$i;$j--){
            if($arr[$i] < $arr[$j]){
                $t = $arr[$i];
                $arr[$i] = $arr[$j];
                $arr[$j]= $t;

                $arr1 = [];
                for($k=$i+1;$k<$size;$k++){
                    array_push($arr1,$arr[$k]);
                }
                sort($arr1); //对i+1到size位置的数排序

                $ans = 0;
                for($k=0;$k<=$i;$k++){
                    $ans = $ans*10+$arr[$k];
                }

                for($k=0;$k<count($arr1);$k++){
                    $ans =$ans*10+$arr1[$k];
                }

                return $ans;
            }
        }
    }

    return -1;
}

C++代码

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return int整型
     */
    int nextGreaterElement(int n) {
        vector<int> ll;
        while (n > 0) {
            ll.push_back(n % 10);
            n = n / 10;
        }

        int size = ll.size();
        vector<int> arr(size);
        for (int i = 0; i < size; i++) {
            arr[i] = ll[size - i - 1];
        }
        //利用lintcode 52 下一个排列的解放方法
        //从后往前找,找到第一对(i,j),i<j,使得 nums[i] < num[j] ,
        //然后将两者交换后,后面部分排序即可。
        for (int i = size - 1; i >= 0; i--) {
            for (int j = size - 1; j > i; j--) {
                if (arr[i] < arr[j]) {
                    int t = arr[i];
                    arr[i] = arr[j];
                    arr[j] = t;

                    std::sort(arr.begin() + i + 1, arr.end()); //对i+1到size位置的数排序

                    int ans = 0;

                    for (int k = 0; k < size; k++) {
                        ans = ans * 10 + arr[k];
                    }
                    return ans;
                }
            }
        }
        return -1;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/644908.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Apache Doris】BE宕机问题排查指南

【Apache Doris】BE宕机问题排查指南 背景BE宕机分类如何判断是BE进程是Crash还是OOMBE Crash 后如何排查BE OOM 后如何分析Cache 没及时释放导致BE OOM&#xff08;2.0.3-rc04&#xff09; 关于社区 作者&#xff5c;李渊渊 背景 在实际线上生产环境中&#xff0c;大家可能遇…

新建一个STM32工程(精简版)

一、新建一个STM32工程 二、建立三个文件夹 1、Start文件夹里的东西 &#xff08;1&#xff09;启动文件&#xff1a;STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm &#xff08;2&#xff09;STM32…

springboot社区助老志愿服务系统-计算机毕业设计源码96682

摘要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在图书馆管理的要求下&#xff0c;开发一款整体式结构的社区助老志愿服务…

OFDM 802.11a的FPGA实现(二十)使用AXI-Stream FIFO进行跨时钟(含代码)

目录 1.前言 2.AXI-Stream FIFO时序 3.AXI-Stream FIFO配置信息 4.时钟控制模块MMCM 5.ModelSim仿真 6.总结 1.前言 至此&#xff0c;通过前面的文章讲解&#xff0c;对于OFDM 802.11a的发射基带的一个完整的PPDU帧的所有处理已经全部完成&#xff0c;其结构如下图所示&…

Linux echo命令(在终端输出文本)

文章目录 Linux Echo命令深度解析简介命令语法常见选项- -n&#xff1a;不输出行尾的换行符&#xff0c;这意味着输出后不会换到下一行。- -e&#xff1a;启用反斜杠转义的解释&#xff0c;允许使用特殊字符。- -E&#xff1a;禁用反斜杠转义的解释&#xff08;默认选项&#x…

CI/CD 管道中的自动化测试:类型和阶段

在上一篇文章中&#xff0c;我们讨论了敏捷团队自动化测试用例的各种用例。其中一种情况是&#xff0c;团队希望将测试与每个构建集成&#xff0c;并将持续集成作为构建过程的一部分。 在本文中&#xff0c;我们将讨论持续集成/持续交付平台中的集成测试。 让我们先从基础知识…

嵌入式全栈开发学习笔记---C语言笔试复习大全22

目录 结构体 结构体的声明 定义结构体变量 访问结构体成员进行初始化 通过结构体变量名访问结构体成员 结构体指针 结构体指针的定义 通过结构体指针访问结构体成员 结构体数组 结构体数组的定义 遍历结构体数组 结构体的长度&#xff08;笔试重点&#xff09; 上一…

Attention相关问题笔试解析。

Attention相关问题笔试解析。 题目描述一&#xff1a;【选择】题目描述二&#xff1a;【简答】题目描述三&#xff1a;【代码】Scaled Dot-Product Attention&#xff1a;下面是用PyTorch实现的一个Attention机制的代码。这个实现包括一个简单的Scaled Dot-Product Attention机…

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型 前言 整了一个在C# Winform中调用文生图Stable Diffusion XL的小程序&#xff0c;基于百度智能云千帆平台 步骤 如何注册百度智能云和创建应用&#xff0c;获取API 密钥等和在之前的博客中基本相同&#…

P6160 [Cnoi2020] 向量

[Cnoi2020] 向量 题目背景 向量(vector)&#xff0c;指具有大小(Magnitude)和方向(Direction) 的量。 与向量对应的量叫做数量(Scalar)&#xff0c;数量只有大小&#xff0c;没有方向。 对于 Cirno 来说&#xff0c;整天环绕氷屋的旋转 Sangetsusei 们是向量而不是数量。 Sun…

spring模块(三)Spring AOP(2)使用

一、demo 1、spring项目 &#xff08;1&#xff09;pom <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.13.RELEASE</version></dependency>&l…

[数组查找]1.图解线性查找及其代码实现

线性查找 线性查找是一种在数组中查找数据的算法。与二分查找不同&#xff0c;即便数据没有按顺序存储&#xff0c;也可以应用线性查找。线性查找的操作很简单&#xff0c;只要在数组中从头开始依次往下查找即可。虽然存储的数据类型没有限制&#xff0c;但为了便于理解&#x…

CorelCAD v2022.5 解锁版 安装教程(2D制图 3D设计和打印的简化软件)

前言 CorelCAD&#xff0c;加拿大Corel公司开发的一款适用于2D制图、3D设计和打印的简化版CAD软件。它是款专业的2D制图和3D设计软件&#xff0c;拥有行业标准文件兼容性&#xff0c;支持 .DWG、.STL、.PDF、 .CDR*等文件格式&#xff0c;轻松实现协作和项目共享&#xff0c;利…

电商零基础的人,可以做抖音小店吗?它操作难度大吗?

大家好&#xff0c;我是电商糖果 随着短视频电商的热度越来越大&#xff0c;很多消费者都有了抖音购物的习惯。 于是入驻抖音开店就成了很多人创业做电商的首选。 可是抖音推出的电商项目——抖音小店&#xff0c;出来的时间不是很久&#xff0c;很多人对它了解也不深&#…

2024年5月LLM最新排名:GPT-4o出道即巅峰!国内3个大模型榜上有名!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

设计模式 17 组合模式 Composite Pattern

设计模式 17 组合模式 Composite Pattern 1.定义 组合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又叫部分整体模式&#xff0c;是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次。这种类型的设…

Java进阶学习笔记21——泛型概念、泛型类、泛型接口

泛型&#xff1a; 定义类、接口、方法的时候&#xff0c;同时声明了一个或者多个类型变量&#xff08;如: <E>&#xff09;,称之为泛型类、泛型接口、泛型方法&#xff0c;我们统称之为泛型。 说明这是一个泛型类。 如果不使用泛型&#xff0c;我们可以往ArrayList中传…

浅谈网络安全态势感知

前言 网络空间环境日趋复杂&#xff0c;随着网络攻击种类和频次的增加&#xff0c;自建强有力的网络安全防御系统成为一个国家发展战略的一部分&#xff0c;而网络态势感知是实现网络安全主动防御的重要基础和前提。 什么是网络安全态势感知&#xff1f; 态势感知一词来源于对…

文心智能体大赛:百度文心智能体平台初体验

写在前面 博文内容涉及&#xff1a;文心智能体大赛:文心智能体初体验理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我徒然忘记了热闹&#xff0c;却来不及悟透真正的清冷(《四喜忧国》) 前言 徒然忘记了热闹&#xff0c;却来不及悟透真正的清冷(《四喜忧国》)&#xff0c;在…

前端日志收集(monitor-report v1)

为什么 为什么自己封装而不是使用三方 类似 Sentry 这种比较全面的 因为 Sentry 很大我没安装成功&#xff0c;所有才自己去封装的 为什么使用 可以帮助你简单解决前端收集错误日志、收集当前页面访问量&#xff0c;网站日活跃&#xff0c;页面访问次数&#xff0c;用户行…