国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ù)組中查找元素的第一個和最后一個位置的評論 (共 條)

分享到微博請遵守國家法律
北辰区| 喜德县| 额济纳旗| 固阳县| 长汀县| 黄浦区| 调兵山市| 庄河市| 朝阳县| 尉氏县| 长沙县| 新竹县| 福鼎市| 浦东新区| 淮安市| 朝阳市| 雷波县| 呼伦贝尔市| 湖南省| 甘谷县| 百色市| 平阴县| 勃利县| 时尚| 定结县| 新津县| 南平市| 延庆县| 安乡县| 会泽县| 会昌县| 昌平区| 措美县| 会同县| 新丰县| 建始县| 宜兰县| 隆尧县| 恩平市| 获嘉县| 文成县|