2089.找出数组排序后的目标下标:一次遍历不排序

【LetMeFly】2089.找出数组排序后的目标下标:一次遍历不排序

力扣题目链接:https://leetcode.cn/problems/find-target-indices-after-sorting-array/

给你一个下标从 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

解题方法:遍历

遍历一次数组,得到:

  1. 小于$target$的元素个数$less$
  2. 等于$target$的元素个数$equal$

那么答案就是$[less, less + 1, \ldots, less + equal - 1]$这$equal$个下标。

  • 时间复杂度$O(len(nums))$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
* @LastEditTime: 2026-10-19 21:43:44
*/
class Solution {
public:
vector<int> targetIndices(vector<int>& nums, int target) {
int less = 0, equal = 0;
for (int t : nums) {
if (t < target) {
less++;
} else if (t == target) {
equal++;
}
}
vector<int> ans(equal);
ranges::iota(ans, less);
return ans;
}
};

End

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源


2089.找出数组排序后的目标下标:一次遍历不排序
https://blog.letmefly.xyz/2026/10/19/LeetCode 2089.找出数组排序后的目标下标/
作者
发布于
2026年10月19日
许可协议