You are given a 0-indexed integer array nums
. Initially on minute 0
, the array is unchanged. Every minute, the leftmost element in nums
is removed until no elements remain. Then, every minute, one element is appended to the end of nums
, in the order they were removed in, until the original array is restored. This process repeats indefinitely.
- For example, the array
[0,1,2]
would change as follows:[0,1,2] → [1,2] → [2] → [] → [0] → [0,1] → [0,1,2] → [1,2] → [2] → [] → [0] → [0,1] → [0,1,2] → ...
You are also given a 2D integer array queries
of size n
where queries[j] = [timej, indexj]
. The answer to the jth
query is:
nums[indexj]
ifindexj < nums.length
at minutetimej
-1
ifindexj >= nums.length
at minutetimej
Return an integer array ans
of size n
where ans[j]
is the answer to the jth
query.
Example 1:
Input: nums = [0,1,2], queries = [[0,2],[2,0],[3,2],[5,0]] Output: [2,2,-1,0] Explanation: Minute 0: [0,1,2] - All elements are in the nums. Minute 1: [1,2] - The leftmost element, 0, is removed. Minute 2: [2] - The leftmost element, 1, is removed. Minute 3: [] - The leftmost element, 2, is removed. Minute 4: [0] - 0 is added to the end of nums. Minute 5: [0,1] - 1 is added to the end of nums. At minute 0, nums[2] is 2. At minute 2, nums[0] is 2. At minute 3, nums[2] does not exist. At minute 5, nums[0] is 0.
Example 2:
Input: nums = [2], queries = [[0,0],[1,0],[2,0],[3,0]] Output: [2,-1,2,-1] Minute 0: [2] - All elements are in the nums. Minute 1: [] - The leftmost element, 2, is removed. Minute 2: [2] - 2 is added to the end of nums. Minute 3: [] - The leftmost element, 2, is removed. At minute 0, nums[0] is 2. At minute 1, nums[0] does not exist. At minute 2, nums[0] is 2. At minute 3, nums[0] does not exist.
Constraints:
1 <= nums.length <= 100
0 <= nums[i] <= 100
n == queries.length
1 <= n <= 105
queries[j].length == 2
0 <= timej <= 105
0 <= indexj < nums.length
class Solution:
def elementInNums(self, nums: List[int], queries: List[List[int]]) -> List[int]:
n, m = len(nums), len(queries)
ans = [-1] * m
for j, (t, i) in enumerate(queries):
t %= 2 * n
if t < n and i < n - t:
ans[j] = nums[i + t]
elif t > n and i < t - n:
ans[j] = nums[i]
return ans
class Solution {
public int[] elementInNums(int[] nums, int[][] queries) {
int n = nums.length, m = queries.length;
int[] ans = new int[m];
for (int j = 0; j < m; ++j) {
ans[j] = -1;
int t = queries[j][0], i = queries[j][1];
t %= (2 * n);
if (t < n && i < n - t) {
ans[j] = nums[i + t];
} else if (t > n && i < t - n) {
ans[j] = nums[i];
}
}
return ans;
}
}
class Solution {
public:
vector<int> elementInNums(vector<int>& nums, vector<vector<int>>& queries) {
int n = nums.size(), m = queries.size();
vector<int> ans(m, -1);
for (int j = 0; j < m; ++j) {
int t = queries[j][0], i = queries[j][1];
t %= (n * 2);
if (t < n && i < n - t) {
ans[j] = nums[i + t];
} else if (t > n && i < t - n) {
ans[j] = nums[i];
}
}
return ans;
}
};
func elementInNums(nums []int, queries [][]int) []int {
n, m := len(nums), len(queries)
ans := make([]int, m)
for j, q := range queries {
t, i := q[0], q[1]
t %= (n * 2)
ans[j] = -1
if t < n && i < n-t {
ans[j] = nums[i+t]
} else if t > n && i < t-n {
ans[j] = nums[i]
}
}
return ans
}