34.在排序数组中查找元素的第一个和最后一个位置--leetcode算法题解(带注释)
生活随笔
收集整理的這篇文章主要介紹了
34.在排序数组中查找元素的第一个和最后一个位置--leetcode算法题解(带注释)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
public int[] searchRange(int[] nums, int target) {//先決條件排除一部分if(target < nums[0] || target > nums[nums.length - 1]){return new int[]{-1,-1};}//初始化左右邊界int l = 0;int r = nums.length - 1;//初始化數(shù)組int[] arr = {-1,-1};int mid = 0;//代表左邊界是否有被找到boolean canBeFound = false;//找arr[0] 也就是左邊界while(l <= r){//二分法求左邊界mid = l + (r - l) / 2;if(target == nums[mid]){//告訴下面我找到了左邊界canBeFound = true;r = mid - 1;//賦值arr[0] = mid;//如果r經(jīng)過(guò)減一之后小于0,說(shuō)明到達(dá)原數(shù)組邊界if(r < 0){break;}//如果這個(gè)數(shù)的左邊那個(gè)數(shù)比自己小,說(shuō)明找到了邊界if(nums[r] < nums[mid]){break;}}//正常操作if(target < nums[mid]){r = mid - 1;}if(target > nums[mid]){l = mid + 1;}}if(!canBeFound){//找不到左邊界return arr;}//reset l and rl = mid;r = nums.length - 1;//找右邊界,和上面對(duì)稱(chēng)即可while(l <= r){mid = l + (r - l) / 2;if(target == nums[mid]){l = mid + 1;arr[1] = mid;if(l >= nums.length){break;}if(nums[l] > nums[mid]){break;}}if(target < nums[mid]){r = mid - 1;}if(target > nums[mid]){l = mid + 1;}}return arr;}
其實(shí)還有一種方法是一個(gè)while里把左右邊界都找出來(lái),這個(gè)初次寫(xiě)可能會(huì)比較亂,我也還沒(méi)搞懂,就這樣先了,好歹也是手?jǐn)]出來(lái)的,上面的算法。。
總結(jié)
以上是生活随笔為你收集整理的34.在排序数组中查找元素的第一个和最后一个位置--leetcode算法题解(带注释)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《真三国无双》电影吕布曝光 造型神还原
- 下一篇: 三星电脑分屏怎么设置在哪里设置(三星怎么