目标
给你一个下标从 0 开始的整数数组 nums 以及一个目标元素 target 。
目标下标 是一个满足 nums[i] == target 的下标 i 。
将 nums 按 非递减 顺序排序后,返回由 nums 中目标下标组成的列表。如果不存在目标下标,返回一个 空 列表。返回的列表必须按 递增 顺序排列。
示例 1:
输入:nums = [1,2,5,2,3], target = 2
输出:[1,2]
解释:排序后,nums 变为 [1,2,2,3,5] 。
满足 nums[i] == 2 的下标是 1 和 2 。
示例 2:
输入:nums = [1,2,5,2,3], target = 3
输出:[3]
解释:排序后,nums 变为 [1,2,2,3,5] 。
满足 nums[i] == 3 的下标是 3 。
示例 3:
输入:nums = [1,2,5,2,3], target = 5
输出:[4]
解释:排序后,nums 变为 [1,2,2,3,5] 。
满足 nums[i] == 5 的下标是 4 。
示例 4:
输入:nums = [1,2,5,2,3], target = 4
输出:[]
解释:nums 中不含值为 4 的元素。
说明:
- 1 <= nums.length <= 100
- 1 <= nums[i], target <= 100
思路
有一个下标从 0 开始的数组 nums,从中查找值为 target 的元素,返回其在排序后的数组中的下标,如果没有找到返回空。
直接的想法是先排序数组,然后遍历查找目标,将下标加入结果集,时间复杂度为 O(nlogn)。
本题只关心特定元素在数组中的位次,只需统计左右两端的元素数目即可算出下标。
代码
/**
* @date 2026-10-19 8:48
*/
public class TargetIndices2089 {
public List<Integer> targetIndices(int[] nums, int target) {
int n = nums.length;
int l = 0, r = 0;
List<Integer> res = new ArrayList<>();
for (int num : nums) {
if (num < target) {
l++;
} else if (num > target) {
r++;
}
}
int length = n - l - r;
for (int i = 0; i < length; i++) {
res.add(l++);
}
return res;
}
}
性能









