阿里巴巴找黄金宝箱(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 |
说明 | 无 |
题目解析
- 本题目可以采用栈结构让解题变得简单,不熟悉的可以提前学习一下
- 本题采用的解法不是栈结构,而是使用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+" ");
}
}
}
代码运行示例