标签:Sorting Target nums int 复杂度 After List mid target
这道题的最简单算法,时间复杂度O(nlogn):
public List<Integer> targetIndices(int[] nums, int target) { Arrays.sort(nums); List<Integer> res = new ArrayList<>(); for(int i=0;i<nums.length;i++){ if(nums[i]==target) res.add(i); } return res; }
把查找数字那部分binary search的算法,总的时间复杂度还是O(nlogn):
public List<Integer> targetIndices(int[] nums, int target) { Arrays.sort(nums); List<Integer> res = new ArrayList<>(); int l = 0, r = nums.length-1; while(l<=r){ int mid = (l+r)/2; if(nums[mid]<target){ l = mid+1; }else if(nums[mid]>target){ r = mid -1; }else{ int i = mid; while(i>=0){ if(nums[i]==target){ res.add(0, i); } i--; } i = mid+1; while(i<nums.length){ if(nums[i]==target){ res.add(i); } i++; } return res; } } return res; }
不需要排序的算法,时间复杂度O(n)
public List<Integer> targetIndices(int[] nums, int target) { int belowTCount=0, tCount=0; for(int n : nums){ if(n<target) belowTCount++; else if(n==target) tCount++; } List<Integer> ans = new ArrayList<>(); for(int t=0;t<tCount;t++) ans.add(belowTCount++); return ans; }
标签:Sorting,Target,nums,int,复杂度,After,List,mid,target 来源: https://www.cnblogs.com/feiflytech/p/15820751.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。