给你一个待查数组 queries
,数组中的元素为 1
到 m
之间的正整数。 请你根据以下规则处理所有待查项 queries[i]
(从 i=0
到 i=queries.length-1
):
- 一开始,排列
P=[1,2,3,...,m]
。 - 对于当前的
i
,请你找出待查项queries[i]
在排列P
中的位置(下标从 0 开始),然后将其从原位置移动到排列P
的起始位置(即下标为 0 处)。注意,queries[i]
在P
中的位置就是queries[i]
的查询结果。
请你以数组形式返回待查数组 queries
的查询结果。
示例 1:
输入:queries = [3,1,2,1], m = 5 输出:[2,1,2,1] 解释:待查数组 queries 处理如下: 对于 i=0: queries[i]=3, P=[1,2,3,4,5], 3 在 P 中的位置是 2,接着我们把 3 移动到 P 的起始位置,得到 P=[3,1,2,4,5] 。 对于 i=1: queries[i]=1, P=[3,1,2,4,5], 1 在 P 中的位置是 1,接着我们把 1 移动到 P 的起始位置,得到 P=[1,3,2,4,5] 。 对于 i=2: queries[i]=2, P=[1,3,2,4,5], 2 在 P 中的位置是 2,接着我们把 2 移动到 P 的起始位置,得到 P=[2,1,3,4,5] 。 对于 i=3: queries[i]=1, P=[2,1,3,4,5], 1 在 P 中的位置是 1,接着我们把 1 移动到 P 的起始位置,得到 P=[1,2,3,4,5] 。 因此,返回的结果数组为 [2,1,2,1] 。
示例 2:
输入:queries = [4,1,2,2], m = 4 输出:[3,1,2,0]
示例 3:
输入:queries = [7,5,5,8,3], m = 8 输出:[6,5,0,7,5]
提示:
1 <= m <= 10^3
1 <= queries.length <= m
1 <= queries[i] <= m
题目数据规模不大,直接模拟即可。
class Solution:
def processQueries(self, queries: List[int], m: int) -> List[int]:
nums = list(range(1, m + 1))
res = []
for num in queries:
res.append(nums.index(num))
nums.remove(num)
nums.insert(0, num)
return res
class Solution {
public int[] processQueries(int[] queries, int m) {
List<Integer> nums = new LinkedList<>();
for (int i = 0; i < m; ++i) {
nums.add(i + 1);
}
int[] res = new int[queries.length];
int i = 0;
for (int num : queries) {
res[i++] = nums.indexOf(num);
nums.remove(Integer.valueOf(num));
nums.add(0, num);
}
return res;
}
}
class Solution {
public:
vector<int> processQueries(vector<int>& queries, int m) {
vector<int> nums(m);
iota(nums.begin(), nums.end(), 1);
vector<int> res;
for (int num : queries)
{
int idx = -1;
for (int i = 0; i < m; ++i)
{
if (nums[i] == num) {
idx = i;
break;
}
}
res.push_back(idx);
nums.erase(nums.begin() + idx);
nums.insert(nums.begin(), num);
}
return res;
}
};
func processQueries(queries []int, m int) []int {
nums := make([]int, m)
for i := 0; i < m; i++ {
nums[i] = i + 1
}
var res []int
for _, num := range queries {
idx := -1
for i := 0; i < m; i++ {
if nums[i] == num {
idx = i
break
}
}
res = append(res, idx)
nums = append(nums[:idx], nums[idx+1:]...)
nums = append([]int{num}, nums...)
}
return res
}