leetcode-ソート配列で要素の最初の位置と最後の位置を検索-java
トピックの説明:昇順に配列された整数配列numsと、ターゲット値targetを指定します.配列内の所定のターゲット値の開始位置と終了位置を特定します.
あなたのアルゴリズムの時間複雑度はO(log n)レベルでなければなりません.
配列にターゲット値が存在しない場合は、[-1,-1]を返します.
例1:
入力:nums=[5,7,7,8,8,10],target=8出力:[3,4]
例2:
入力:nums=[5,7,7,8,8,10],target=6出力:[-1,-1]
構想:実は最も左の境界の問題を求めて、targetに出会って焦らないで飛び出して、最も左のtargetの下標を得ることです.
あなたのアルゴリズムの時間複雑度はO(log n)レベルでなければなりません.
配列にターゲット値が存在しない場合は、[-1,-1]を返します.
例1:
入力:nums=[5,7,7,8,8,10],target=8出力:[3,4]
例2:
入力:nums=[5,7,7,8,8,10],target=6出力:[-1,-1]
構想:実は最も左の境界の問題を求めて、targetに出会って焦らないで飛び出して、最も左のtargetの下標を得ることです.
class Solution {
public int[] searchRange(int[] nums, int target) {
//target
int first = findTarget(nums,target);
//target+1
int last = findTarget(nums,target+1) - 1;
if(first == nums.length || nums[first] != target){
return new int[]{-1,-1};
}else{
return new int[]{first,last};
}
}
public int findTarget(int[] nums, int target){
int start = 0,end = nums.length;
while(start < end){
int mid = (end - start)/2 + start;
if(nums[mid] < target){
start = mid + 1;
// ,
}else{
end = mid;
}
}
return end;
}
}