《坎巴拉太空計劃》增強版將於今年秋季登陸PS5/XS
阿新 • • 發佈:2021-06-25
一、題目
給定一個按照升序排列的整數陣列 nums
,和一個目標值 target
。找出給定目標值在陣列中的開始位置和結束位置。
如果陣列中不存在目標值 target
,返回[-1, -1]
。
進階:
你可以設計並實現時間複雜度為O(log n)
的演算法解決此問題嗎?
二、解法
思路:二分查詢。額外引數:尋找的是最左邊的還是最右邊的。
如果尋找的是最左邊的,優先查詢左邊劃分的部分。如果尋找的是最右邊的,優先查詢右邊劃分的部分。
class Solution { public int findValue(int[] nums,int left,int right,int target,boolean findFirst){ int len=right-left+1; if(len==1){ if(nums[left]==target) return left; else return -1; }else{ int mid=left+(right-left)/2; if(findFirst){ if(target>=nums[left]&&target<=nums[mid]){ return findValue(nums,left,mid,target,findFirst); }else if(target>=nums[mid+1]&&target<=nums[right]){ return findValue(nums,mid+1,right,target,findFirst); }else return -1; }else{ if(target>=nums[mid+1]&&target<=nums[right]){ return findValue(nums,mid+1,right,target,findFirst); }else if(target>=nums[left]&&target<=nums[mid]){ return findValue(nums,left,mid,target,findFirst); }else return -1; } } } public int[] searchRange(int[] nums, int target) { if(nums.length==0) return new int[]{-1,-1}; else return new int[]{findValue(nums,0,nums.length-1,target,true), findValue(nums,0,nums.length-1,target,false)}; } }