华为OD机试之阿里巴巴找黄金宝箱(IV)(Java源码)

阿里巴巴找黄金宝箱(IV)

题目描述
一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的箱子,每个箱子上面有一个数字,箱子排列成一个环,编号最大的箱子的下一个是编号为0的箱子。
请输出每个箱了贴的数字之后的第一个比它大的数,如果不存在则输出-1。


输入描述
输入一个数字字串,数字之间使用逗号分隔,例如: 1,2,3,1

  • 1 ≤ 字串中数字个数 ≤ 10000:
  • -100000 ≤ 每个数字值 ≤ 100000

输出描述
下一个大的数列表,以逗号分隔,例如: 2,3,6,-1,6

用例

输入 2,5,2
输出 5,-1,5
说明

第一个2的下一个更大的数是5;

数字5找不到下一个更大的数;

第二个2的下一个最大的数需要循环搜索,结果也是 5

输入 3,4,5,6,3
输出 4,5,6,-1.4
说明

题目解析

  1. 本题目可以采用栈结构让解题变得简单,不熟悉的可以提前学习一下
  2. 本题采用的解法不是栈结构,而是使用List,至于如何去遍历自己之外的其他节点,只需要索引自增时 对长度进去取模
    例如 索引为 0 1 2 3 4 要取索引4之外的下一个数,那么就得从4的下一个开始即 0开始 往后接着遍历,直到索引位置是其本身为止
    具体不懂的请仔细阅读代码
import java.util.Scanner;

public class T66 {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		String strArr[] = input.split(",");
		int nums[] = new int[strArr.length];
		for (int i = 0; i < strArr.length; i++) {
    
    
			nums[i] = Integer.parseInt(strArr[i]);
		}
		for (int objIndex = 0; objIndex < nums.length; objIndex++) {
    
    
			int next = -1;
			for (int nextObj = objIndex + 1; nextObj != objIndex;) {
    
    
				if (nextObj == nums.length) {
    
    
					nextObj = 0;
				}
				// System.out.println(nextObj+"->>"+nums[nextObj]);
				if (nums[nextObj] > nums[objIndex]) {
    
    
					next = nums[nextObj];
					// System.out.println(nums[objIndex]+"-"+nums[nextObj]);
					break;
				}
				nextObj = (++nextObj) % nums.length; // for循环的第三个要素
			}
			System.out.print(next+" ");
		}
	}
}

代码运行示例
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33183456/article/details/131321260