comments | difficulty | edit_url | tags | |||
---|---|---|---|---|---|---|
true |
中等 |
|
有 n
个编号从 1
到 n
的打开的窗口,我们想要模拟使用 alt + tab 键在窗口之间导航。
给定数组 windows
包含窗口的初始顺序(第一个元素在最前面,最后一个元素在最后面)。
同时给定数组 queries
表示每一次查询中,编号为 queries[i]
的窗口被切换到最前面。
返回 windows
数组的最后状态。
示例 1:
输入:windows = [1,2,3], queries = [3,3,2]
输出:[2,3,1]
解释:
以下是每次查询后的 windows 数组:
- 初始顺序:
[1,2,3]
- 第一次查询后:
[3,1,2]
- 第二次查询后:
[3,1,2]
- 最后一次查询后:
[2,3,1]
示例 2:
输入:windows = [1,4,2,3], queries = [4,1,3]
输出:[3,1,4,2]
解释:
以下是每次查询后的 windows 数组:
- 初始顺序:
[1,4,2,3]
- 第一次查询后:
[4,1,2,3]
- 第二次查询后:
[1,4,2,3]
- 最后一次查询后:
[3,1,4,2]
提示:
1 <= n == windows.length <= 105
windows
是[1, n]
的一个排列。1 <= queries.length <= 105
1 <= queries[i] <= n
根据题目描述,越是后面的查询,越是出现在最前面的位置。因此,我们可以逆序遍历
时间复杂度
class Solution:
def simulationResult(self, windows: List[int], queries: List[int]) -> List[int]:
s = set()
ans = []
for q in queries[::-1]:
if q not in s:
ans.append(q)
s.add(q)
for w in windows:
if w not in s:
ans.append(w)
return ans
class Solution {
public int[] simulationResult(int[] windows, int[] queries) {
int n = windows.length;
boolean[] s = new boolean[n + 1];
int[] ans = new int[n];
int k = 0;
for (int i = queries.length - 1; i >= 0; --i) {
int q = queries[i];
if (!s[q]) {
ans[k++] = q;
s[q] = true;
}
}
for (int w : windows) {
if (!s[w]) {
ans[k++] = w;
}
}
return ans;
}
}
class Solution {
public:
vector<int> simulationResult(vector<int>& windows, vector<int>& queries) {
int n = windows.size();
vector<bool> s(n + 1);
vector<int> ans;
for (int i = queries.size() - 1; ~i; --i) {
int q = queries[i];
if (!s[q]) {
s[q] = true;
ans.push_back(q);
}
}
for (int w : windows) {
if (!s[w]) {
ans.push_back(w);
}
}
return ans;
}
};
func simulationResult(windows []int, queries []int) (ans []int) {
n := len(windows)
s := make([]bool, n+1)
for i := len(queries) - 1; i >= 0; i-- {
q := queries[i]
if !s[q] {
s[q] = true
ans = append(ans, q)
}
}
for _, w := range windows {
if !s[w] {
ans = append(ans, w)
}
}
return
}
function simulationResult(windows: number[], queries: number[]): number[] {
const n = windows.length;
const s: boolean[] = Array(n + 1).fill(false);
const ans: number[] = [];
for (let i = queries.length - 1; i >= 0; i--) {
const q = queries[i];
if (!s[q]) {
s[q] = true;
ans.push(q);
}
}
for (const w of windows) {
if (!s[w]) {
ans.push(w);
}
}
return ans;
}