2020-04-12 34. Find First and Last Position of Element in Sorted Array

這題如果分別寫兩個(gè)二分查找,還比較簡單;如果想寫同一個(gè)函數(shù)做兩次二分,就有多一些邊界情況要考慮:


class Solution {

? ? public int[] searchRange(int[] nums, int target) {

? ? ? ? if (nums == null || nums.length == 0) return new int[]{-1, -1};


? ? ? ? int first = findFirstGreaterOrEqualsTo(nums, target, 0);

? ? ? ? if (first == nums.length || nums[first] != target) return new int[]{-1, -1};


? ? ? ? int last = findFirstGreaterOrEqualsTo(nums, target + 1, first + 1) - 1;

? ? ? ? return new int[]{first, last};

? ? }


? ? int findFirstGreaterOrEqualsTo(int[] nums, int target, int start) {

? ? ? ? int l = start, r = nums.length;

? ? ? ? // System.out.println("find first...");

? ? ? ? while (l < r) {

? ? ? ? ? ? // System.out.println("l: " + l + " r: " + r);

? ? ? ? ? ? int mid = l + (r - l) / 2, midVal = nums[mid];

? ? ? ? ? ? if (midVal >= target) {

? ? ? ? ? ? ? ? r = mid;

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? l = mid + 1;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return l;

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容