解題思路: 雙指針/二分查找法(官網(wǎng))
如果數(shù)組中不存在目標(biāo)值 target,返回?[-1, -1]蝗羊。
進(jìn)階:
你可以設(shè)計(jì)并實(shí)現(xiàn)時(shí)間復(fù)雜度為?O(log n)?的算法解決此問(wèn)題嗎固棚?
示例 1:
輸入:nums = [5,7,7,8,8,10], target = 8
輸出:[3,4]
示例?2:
輸入:nums = [5,7,7,8,8,10], target = 6
輸出:[-1,-1]
示例 3:
輸入:nums = [], target = 0
輸出:[-1,-1]
提示:
0 <= nums.length <= 105
-109?<= nums[i]?<= 109
nums?是一個(gè)非遞減數(shù)組
-109?<= target?<= 109
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有统翩。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處此洲。
代碼實(shí)現(xiàn):
class?Solution?{
????public?int[]?searchRange(int[]?nums,?int?target)?{
????????if?(nums?==?null?||?nums.length?==?0)?{
????????????return?new?int[]{-1,?-1};
????????}
????????int?len?=?nums.length;
????????int?head?=?0;?int?tail?=?len?-?1;
????????boolean?foundHead?=?false;
????????boolean?foundTail?=?false;
????????while?(head?<=?tail)?{
????????????if?(!foundHead)?{
????????????????if?(nums[head]?==?target)?{
????????????????????foundHead?=?true;
????????????????}?else?{
????????????????????head?++;
????????????????}
????????????}
????????????if?(!foundTail)?{
????????????????if?(nums[tail]?==?target)?{
????????????????????foundTail?=?true;
????????????????}?else?{
????????????????????tail?--;
????????????????}
????????????}
????????????if?(foundHead?&&?foundTail)?{
????????????????break;
????????????}
????????}
????????if?(foundHead?&&?foundTail)?{
????????????return?new?int[]{head,?tail};
????????}?else?{
????????????return?new?int[]{-1,?-1};
????????}
????}
}