题目:
给你一个下标从 0 开始的字符串数组 words ,其中 words[i] 要么是一个字符串形式的正整数,要么是字符串 “prev” 。
我们从数组的开头开始遍历,对于 words 中的每个 “prev” 字符串,找到 words 中的 上一个遍历的整数 ,定义如下:
k 表示到当前位置为止的连续 “prev” 字符串数目(包含当前字符串),令下标从 0 开始的 整数 数组 nums 表示目前为止遍历过的所有整数,同时用 nums_reverse 表示 nums 反转得到的数组,那么当前 “prev” 对应的 上一个遍历的整数 是 nums_reverse 数组中下标为 (k - 1) 的整数。
如果 k 比目前为止遍历过的整数数目 更多 ,那么上一个遍历的整数为 -1 。
请你返回一个整数数组,包含所有上一个遍历的整数。
示例 1:
输入:words = [“1”,“2”,“prev”,“prev”,“prev”]
输出:[2,1,-1]
解释:
对于下标为 2 处的 “prev” ,上一个遍历的整数是 2 ,因为连续 “prev” 数目为 1 ,同时在数组 reverse_nums 中,第一个元素是 2 。
对于下标为 3 处的 “prev” ,上一个遍历的整数是 1 ,因为连续 “prev” 数目为 2 ,同时在数组 reverse_nums 中,第二个元素是 1 。
对于下标为 4 处的 “prev” ,上一个遍历的整数是 -1 ,因为连续 “prev” 数目为 3 ,但总共只遍历过 2 个整数。
示例 2:
输入:words = [“1”,“prev”,“2”,“prev”,“prev”]
输出:[1,2,1]
解释:
对于下标为 1 处的 “prev” ,上一个遍历的整数是 1 。
对于下标为 3 处的 “prev” ,上一个遍历的整数是 2 。
对于下标为 4 处的 “prev” ,上一个遍历的整数是 1 ,因为连续 “prev” 数目为 2 ,同时在数组 reverse_nums 中,第二个元素是 1 。
提示:
1 <= words.length <= 100
words[i] == “prev” 或 1 <= int(words[i]) <= 100
java代码:
// https://space.bilibili.com/206214
class Solution {
public List<Integer> lastVisitedIntegers(List<String> words) {
List<Integer> ans = new ArrayList<>();
List<Integer> a = new ArrayList<>();
int k = 0;
for (String s : words) {
if (s.charAt(0) != 'p') { // 不是 prev
a.add(Integer.parseInt(s));
k = 0;
} else {
ans.add(++k > a.size() ? -1 : a.get(a.size() - k)); // 倒数第 k 个
}
}
return ans;
}
}