麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

leecode 解題總結:34. Search for a Range

2019-11-10 19:16:59
字體:
來源:轉載
供稿:網友
#include <iostream>#include <stdio.h>#include <vector>using namespace std;/*問題:Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.Your algorithm's runtime complexity must be in the order of O(log n).If the target is not found in the array, return [-1, -1].For example,Given [5, 7, 7, 8, 8, 10] and target value 8,return [3, 4].分析:這是二分查找的lower_bound和upper_bound的問題輸入:6(數組元素個數) 8(待查找元素)5 7 7 8 8 106 125 7 7 8 8 101 112 22 2輸出3 4-1 -10 00 1關鍵:1vector<int> results(2 , -1);//vector(n,val)2 		//找不到		if(-1 == low)		{			vector<int> results(2 , -1);//vector(n,val)			return results;		}		//如果找到,但是只有一個元素		else		{			vector<int> results;			results.push_back(low);			results.push_back(high - 1);			return results;		}3 在upper_bound中,		//low == high時,如果找到,就返回		if(nums.at(low) > target)		{			return low;		}		//如果發現找不到,就返回low+1(最后一定low為數組長度)		else		{			return low + 1;		}*/class Solution {public:	//尋找到第一個>=target的位置index,使得即使該元素找不到,插入該元素也有序	int lower_bound(vector<int>& nums , int target)	{		if(nums.empty())		{			return -1;		}		int low = 0;		int high = nums.size() - 1;		int mid;		while(low < high)		{			mid  = low + (high - low) / 2;			//中間大于目標值,目標值,mid可能是結果,繼續在左半部分尋找			if(nums.at(mid) >= target)			{				high = mid;			}			//中間值 < 目標值,mid不可能是結果,在右半部分尋找			else			{				low = mid + 1;			}		}		//low == high時,如果找到,就返回		if(nums.at(low) == target)		{			return low;		}		else		{			return -1;		}	}	//找到第一個>target的元素的下標	int upper_bound(vector<int>& nums , int target)	{		if(nums.empty())		{			return -1;		}		int low = 0;		int high = nums.size() - 1;		int mid;		while(low < high)		{			mid  = low + (high - low) / 2;			//中間大于目標值,目標值,mid可能是結果,需要在左半部分尋找			if(nums.at(mid) > target)			{				high = mid;			}			//中間值 <= 目標值,mid不可能是結果			else			{				low = mid + 1;			}		}		//low == high時,如果找到,就返回		if(nums.at(low) > target)		{			return low;		}		//如果發現找不到,就返回low+1(最后一定low為數組長度)		else		{			return low + 1;		}	}    vector<int> searchRange(vector<int>& nums, int target) {		int low = lower_bound(nums , target);		int high = upper_bound(nums , target);		//找不到		if(-1 == low)		{			vector<int> results(2 , -1);//vector(n,val)			return results;		}		//如果找到,但是只有一個元素		else		{			vector<int> results;			//如果只有一個元素,那么high = low + 1			if(-1 == high)			{				high = low + 1;			}			results.push_back(low);			results.push_back(high - 1);			return results;		}    }};void PRint(vector<int>& results){	if(results.empty())	{		cout << "no result" << endl;		return;	}	int size = results.size();	for(int i = 0 ; i < size ; i++)	{		cout << results.at(i) << " ";	}	cout << endl;}void process(){	int num ;	int value;	vector<int> nums;	int target;	Solution solution;	vector<int> results;	while(cin >> num >> target)	{		nums.clear();		for(int i  = 0 ; i < num ; i++)		{			cin >> value;			nums.push_back(value);		}		results = solution.searchRange(nums , target);		print(results);	}}int main(int argc , char* argv[]){	process();	getchar();	return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美亚洲国产一区二区三区 | 精品久久久久久久久久久久包黑料 | 国产男女爽爽爽爽爽免费视频 | 激情黄页| 久久久久久久一区二区 | 激情视频在线播放 | www.理论片| 羞羞视频免费网站男男 | 国产99久久精品一区二区300 | 亚洲精品午夜国产va久久成人 | 一区二区三区四区高清视频 | 在线天堂中文字幕 | 午夜视频久久久 | 亚洲视频在线一区二区 | 看中国一级毛片 | 青青青在线免费 | 久久久毛片视频 | 久草在线综合 | 日产精品久久久一区二区福利 | 亚洲乱操 | 亚洲人成综合第一网 | 特一级黄色毛片 | 色妞视频男女视频 | 亚洲成a| 九九热免费视频在线观看 | 91精品久久香蕉国产线看观看 | 韩国十九禁高潮床戏在线观看 | 中文字幕xxx | 国产一区免费观看 | 一级国产电影 | 久草在线视频精品 | 久久国产精品久久精品国产演员表 | 福利在线小视频 | 51色视频| 欧美精品久久久久久久久久 | 欧美一区二区片 | 黄污网站在线观看 | 日本精品久久久久 | 欧美黄色一级片视频 | 免费色片| 国产精品资源手机在线播放 |