
题目链接2089. 找出数组排序后的目标下标简单算法原理解法一二分查找6ms击败14.34%时间复杂度O(n logn)这是典型的 “最左端点模型”可以通过最左端点模型找到等于 target 的第一个点然后往后遍历直至不等于 target这个过程中记录下标并返回当然如果没有 target就返回空列表即可下面这篇博客有系统的 二分查找模型知识⬇️一轮复习——D.二分查找模型总结解法二一次遍历0ms击败100.00%时间复杂度O(N)记录 nums 中小于 target 的个数为 less等于 target 的个数为 equal排序后由于相同的数是连续的那么等于 target 的第一个数的下标就是 less最后一个数的下标就是 lessequal-1Java代码class Solution { //2089. 找出数组排序后的目标下标 //解法一二分查找 public ListInteger targetIndices(int[] nums, int target) { //二分查找最左端点模型 int nnums.length; ListInteger retnew ArrayList(); Arrays.sort(nums); int left0,rightn-1; while(leftright){ int midleft(right-left)/2; if(nums[mid]target) leftmid1; else rightmid; } if(nums[left]!target) return ret; while(leftnnums[left]target) ret.add(left); return ret; } }class Solution { //2089. 找出数组排序后的目标下标 //解法二一次遍历 public ListInteger targetIndices(int[] nums, int target) { int less0,equal0; for(int x:nums){ if(xtarget) less; else if(xtarget) equal; } ListInteger retnew ArrayList(); for(int i0;iequal;i) ret.add(lessi); return ret; } }