日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置

發(fā)布時(shí)間:2023/12/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


解法1:

class Solution { public:vector<int> searchRange(vector<int>& nums, int target) {vector<int> temps;int i=0;//i記錄位置int temp=0;//用來(lái)區(qū)分初始位置和結(jié)束位置for(auto m:nums)//遍歷數(shù)組 {if(m!=target) //如果與目標(biāo)數(shù)不相等{i++; //位置+1}else //如果相等{if(temp==0) //標(biāo)志為0,第一次相等,記錄起始位置{temps.push_back(i);temp=1; }if(temp==1) //標(biāo)志為1,第二次相等,記錄起始位置{temps.push_back(i);temp=2;} if(temp==2) //標(biāo)志為2,第n次相等,刪除第n-1次相等記錄{temps.pop_back();temps.push_back(i);}i++;}}if(temp==0) //如果沒(méi)有遇到相等的{temps.push_back(-1);temps.push_back(-1);}return temps;} };

解法二(二分查找):

int lowBorder(vector<int> &nums, int target) {int left=0; //左界賦值int right=nums.size()-1; //右界賦值while(left<=right){int mid=left+(right-left)/2; //尋找中間值if(nums[mid]>=target) //中間值大于目標(biāo)值{right=mid-1; //重新對(duì)右界賦值}else{left=mid+1; //重新對(duì)左界賦值}}return left; //返回左值 }int highBorder(vector<int> &nums, int target) //查找結(jié)束位置{int left = 0; //左界為0int right = nums.size() - 1; //右界賦值while (left <= right){int mid = left + (right - left) / 2; //中間位置賦值if (nums[mid] > target) //如果中間位置大于目標(biāo)值{right = mid - 1; //重新對(duì)右界賦值}else{left = mid + 1; //否則重新對(duì)左界賦值}}return right; //返回右界值}public:vector<int> searchRange(vector<int> &nums, int target){// 答案數(shù)組vector<int> ans;// 排除臟數(shù)據(jù)if (nums.size() == 0){// 初始化就是0return {-1, -1};}int low = lowBorder(nums, target);int high = highBorder(nums, target);if (low > high){return {-1, -1};}return {low, high};}

總結(jié)

以上是生活随笔為你收集整理的Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。