class Solution {
public:
vector<int> occurrencesOfElement(vector<int>& nums, vector<int>& queries, int x) {
}
};
100303. 查询数组中元素的出现位置
给你一个整数数组 nums
,一个整数数组 queries
和一个整数 x
。
对于每个查询 queries[i]
,你需要找到 nums
中第 queries[i]
个 x
的位置,并返回它的下标。如果数组中 x
的出现次数少于 queries[i]
,该查询的答案为 -1 。
请你返回一个整数数组 answer
,包含所有查询的答案。
示例 1:
输入:nums = [1,3,1,7], queries = [1,3,2,4], x = 1
输出:[0,-1,2,-1]
解释:
nums
中只有两个 1 ,所以答案为 -1 。nums
中只有两个 1 ,所以答案为 -1 。示例 2:
输入:nums = [1,2,3], queries = [10], x = 5
输出:[-1]
解释:
nums
中没有 5 ,所以答案为 -1 。
提示:
1 <= nums.length, queries.length <= 105
1 <= queries[i] <= 105
1 <= nums[i], x <= 104
原站题解
golang 解法, 执行用时: 172 ms, 内存消耗: 9 MB, 提交时间: 2024-05-26 19:04:11
func occurrencesOfElement(nums, queries []int, x int) []int { pos := []int{} for i, v := range nums { if v == x { pos = append(pos, i) } } for i, q := range queries { if q > len(pos) { queries[i] = -1 } else { queries[i] = pos[q-1] } } return queries }
java 解法, 执行用时: 5 ms, 内存消耗: 62.3 MB, 提交时间: 2024-05-26 19:03:58
public class Solution { public int[] occurrencesOfElement(int[] nums, int[] queries, int x) { List<Integer> pos = new ArrayList<>(); for (int i = 0; i < nums.length; i++) { if (nums[i] == x) { pos.add(i); } } for (int i = 0; i < queries.length; i++) { if (queries[i] > pos.size()) { queries[i] = -1; } else { queries[i] = pos.get(queries[i] - 1); } } return queries; } }
cpp 解法, 执行用时: 161 ms, 内存消耗: 175.2 MB, 提交时间: 2024-05-26 19:03:44
class Solution { public: vector<int> occurrencesOfElement(vector<int>& nums, vector<int>& queries, int x) { vector<int> pos; for (int i = 0; i < nums.size(); i++) { if (nums[i] == x) { pos.push_back(i); } } for (int& q : queries) { if (q > pos.size()) { q = -1; } else { q = pos[q - 1]; } } return queries; } };
python3 解法, 执行用时: 127 ms, 内存消耗: 31.6 MB, 提交时间: 2024-05-26 19:03:26
''' 用 pos 数组记录所有等于 x 的 nums[i] 的下标 i。 对于每个询问 q=queries[i],如果 q 大于 pos 的长度,则答案为 −1, 否则答案为 pos[q−1]。 ''' class Solution: def occurrencesOfElement(self, nums: List[int], queries: List[int], x: int) -> List[int]: pos = [i for i, v in enumerate(nums) if v == x] return [-1 if q > len(pos) else pos[q - 1] for q in queries]