最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

分享到微博請遵守國家法律
盐山县| 三河市| 仙居县| 河源市| 鱼台县| 米脂县| 老河口市| 读书| 望谟县| 平阳县| 穆棱市| 得荣县| 达拉特旗| 吴旗县| 托克逊县| 铜鼓县| 故城县| 中西区| 孝义市| 科技| 常德市| 肇庆市| 仙桃市| 咸丰县| 和平区| 山阳县| 千阳县| 桐城市| 右玉县| 漾濞| 通渭县| 湖南省| 巴青县| 唐河县| 民权县| 噶尔县| 郯城县| 德阳市| 舒兰市| 泸西县| 柘荣县|