五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

力扣34. 在排序數(shù)組中查找元素的第一個和最后一個位置

2023-03-09 19:57 作者:薄荷硬糖醬  | 我要投稿

題目:

34. 在排序數(shù)組中查找元素的第一個和最后一個位置

難度中等2187收藏分享切換為英文接收動態(tài)反饋

給你一個按照非遞減順序排列的整數(shù)數(shù)組?nums,和一個目標值?target。請你找出給定目標值在數(shù)組中的開始位置和結(jié)束位置。

如果數(shù)組中不存在目標值?target,返回?[-1, -1]。

你必須設(shè)計并實現(xiàn)時間復雜度為?O(log 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?是一個非遞減數(shù)組

  • -109?<= target?<= 109

第一種法:

class?Solution?{

public:

????vector<int>?searchRange(vector<int>&?nums,?int?target)?{

????????if(!nums.size())return?{-1,-1};

???????int?first,last;

????????first?=?searchFirst(nums,target);

????????last?=?searchLast(nums,target);

????????if(first==-1)return?{-1,-1};

????????else?return?{first,last};

????}

?????int?searchFirst(vector<int>&?nums,int?target){

????????????int?right,left,mid;

????????????right?=?nums.size()-1,left=0;

????????????while(right>left){

????????????????mid?=?(right?+?left)>>1;

????????????????if(nums[mid]>target){

????????????????????right?=?mid?-?1;

????????????????}else?if(nums[mid]<target){

????????????????????left?=?mid?+?1;

????????????????}else{

????????????????????right?=?mid;

????????????????}

????????????}

????????????if(nums[left]==target)return?left;

????????????else?return?-1;

????????}

????????int?searchLast(vector<int>&?nums,int?target){

????????????int?right,left,mid;

????????????right?=?nums.size()-1,left=0;

????????????while(right>left){

????????????????mid?=?(right?+?left?)>>1;//這里錯了

????????????????if(nums[mid]>target){

????????????????????right?=?mid?-?1;

????????????????}else?if(nums[mid]<target){

????????????????????left?=?mid?+?1;

????????????????}else{

????????????????????left?=?mid;

????????????????}

????????????}

????????????return?left;

????????}

};

因為這里searchLast是為了找這段連續(xù)數(shù)字的末尾的位置,應(yīng)該要取右邊界,就是向上取整,所以不能mid?=?(right?+?left?)>>1,而是要mid?=?(right?+?left +1)>>1

,不然會陷入無限循環(huán);


第一種法:

class?Solution?{

public:

????vector<int>?searchRange(vector<int>&?nums,?int?target)?{

????????if(!nums.size())return?{-1,-1};

???????int?first,last;

????????first?=?searchFirst(nums,target);

????????last?=?searchLast(nums,target);

????????if(first==-1)return?{-1,-1};

????????else?return?{first,last};

????}

?????int?searchFirst(vector<int>&?nums,int?target){

????????????int?right,left,mid;

????????????right?=?nums.size()-1,left=0;

????????????while(right>left){

????????????????mid?=?(right?+?left)>>1;

????????????????if(nums[mid]>target){

????????????????????right?=?mid?-?1;

????????????????}else?if(nums[mid]<target){

????????????????????left?=?mid?+?1;

????????????????}else{

????????????????????right?=?mid;

????????????????}

????????????}

????????????if(nums[left]==target)return?left;

????????????else?return?-1;

????????}

????????int?searchLast(vector<int>&?nums,int?target){

????????????int?right,left,mid;

????????????right?=?nums.size()-1,left=0;

????????????while(right>left){

????????????????mid?=?(right?+?left + 1)>>1;

????????????????if(nums[mid]>target){

????????????????????right?=?mid?-?1;

????????????????}else?if(nums[mid]<target){

????????????????????left?=?mid?+?1;

????????????????}else{

????????????????????left?=?mid;

????????????????}

????????????}

????????????return?left;

????????}

};

searchFirst是向下取整,取左邊界,searchLast是向上取整,取右邊界

力扣34. 在排序數(shù)組中查找元素的第一個和最后一個位置的評論 (共 條)

分享到微博請遵守國家法律
靖江市| 翁牛特旗| 民和| 城步| 马鞍山市| 吉木萨尔县| 辉县市| 莱阳市| 桦甸市| 自治县| 曲沃县| 天津市| 东丽区| 甘孜县| 友谊县| 余江县| 襄城县| 泾阳县| 惠安县| 察雅县| 阿拉善右旗| 资源县| 富宁县| 通化市| 大姚县| 崇文区| 临沂市| 虹口区| 临清市| 南漳县| 道孚县| 得荣县| 原平市| 富源县| 依兰县| 湖北省| 凤冈县| 芜湖县| 宝鸡市| 萝北县| 江油市|